/* * File: InverseDocumentFrequencyGlobalTermWeighterTest.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 InverseDocumentFrequencyGlobalTermWeighter. * * @author Justin Basilico * @since 3.0 */ public class InverseDocumentFrequencyGlobalTermWeighterTest { /** * Creates a new test. */ public InverseDocumentFrequencyGlobalTermWeighterTest() { } /** * Test of constructors of class InverseDocumentFrequencyGlobalTermWeighter. */ @Test public void testConstructors() { VectorFactory<? extends Vector> vectorFactory = SparseVectorFactory.getDefault(); InverseDocumentFrequencyGlobalTermWeighter instance = new InverseDocumentFrequencyGlobalTermWeighter(); assertSame(vectorFactory, instance.getVectorFactory()); assertNull(instance.getInverseDocumentFrequency()); vectorFactory = VectorFactory.getDefault(); instance = new InverseDocumentFrequencyGlobalTermWeighter(vectorFactory); assertSame(vectorFactory, instance.getVectorFactory()); assertNull(instance.getInverseDocumentFrequency()); } /** * Test of clone method, of class InverseDocumentFrequencyGlobalTermWeighter. */ @Test public void testClone() { InverseDocumentFrequencyGlobalTermWeighter instance = new InverseDocumentFrequencyGlobalTermWeighter(); InverseDocumentFrequencyGlobalTermWeighter 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.getInverseDocumentFrequency(), clone.getInverseDocumentFrequency()); 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.getInverseDocumentFrequency(), clone.getInverseDocumentFrequency()); assertNotSame(instance.getInverseDocumentFrequency(), clone.getInverseDocumentFrequency()); } /** * Test of add method, of class InverseDocumentFrequencyGlobalTermWeighter. */ @Test public void testAdd() { InverseDocumentFrequencyGlobalTermWeighter instance = new InverseDocumentFrequencyGlobalTermWeighter(); 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 InverseDocumentFrequencyGlobalTermWeighter. */ @Test public void testRemove() { InverseDocumentFrequencyGlobalTermWeighter instance = new InverseDocumentFrequencyGlobalTermWeighter(); 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 InverseDocumentFrequencyGlobalTermWeighter. */ @Test public void testGetDimensionality() { InverseDocumentFrequencyGlobalTermWeighter instance = new InverseDocumentFrequencyGlobalTermWeighter(); assertEquals(-1, instance.getDimensionality()); instance.add(new Vector3()); assertEquals(3, instance.getDimensionality()); } /** * Test of getGlobalWeights method, of class InverseDocumentFrequencyGlobalTermWeighter. */ @Test public void testGetGlobalWeights() { InverseDocumentFrequencyGlobalTermWeighter instance = new InverseDocumentFrequencyGlobalTermWeighter(); assertSame(instance.getInverseDocumentFrequency(), 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.getInverseDocumentFrequency(), instance.getGlobalWeights()); } /** * Test of getInverseDocumentFrequency method, of class InverseDocumentFrequencyGlobalTermWeighter. */ @Test public void testGetInverseDocumentFrequency() { InverseDocumentFrequencyGlobalTermWeighter instance = new InverseDocumentFrequencyGlobalTermWeighter(); assertNull(instance.getInverseDocumentFrequency()); 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.0, 0.0, 0.287); Vector actual = instance.getInverseDocumentFrequency(); assertTrue(expected.equals(actual, epsilon)); assertTrue(expected.equals(instance.getGlobalWeights(), epsilon)); instance.add(new Vector3(0.0, 1.0, 0.0)); expected = new Vector3(0.223, 1.609, 0.510); actual = instance.getInverseDocumentFrequency(); assertTrue(expected.equals(actual, epsilon)); assertTrue(expected.equals(instance.getGlobalWeights(), epsilon)); // Test handling of dense. instance.setVectorFactory(VectorFactory.getDefault()); instance.setInverseDocumentFrequency(null); actual = instance.getInverseDocumentFrequency(); assertTrue(expected.equals(actual, epsilon)); assertTrue(expected.equals(instance.getGlobalWeights(), epsilon)); } }