/*
* File: AbstractEntropyBasedGlobalTermWeighterTest.java
* Authors: Justin Basilico
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright April 30, 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.SparseVectorFactory;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.VectorFactory;
import gov.sandia.cognition.math.matrix.VectorUtil;
import gov.sandia.cognition.math.matrix.mtj.Vector2;
import gov.sandia.cognition.math.matrix.mtj.Vector3;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Unit tests for class AbstractEntropyBasedGlobalTermWeighter.
*
* @author Justin Basilico
* @since 3.0
*/
public class AbstractEntropyBasedGlobalTermWeighterTest
{
/**
* Creates a new unit test.
*/
public AbstractEntropyBasedGlobalTermWeighterTest()
{
}
/**
* Test of constructors of class AbstractEntropyBasedGlobalTermWeighter.
*/
@Test
public void testConstructors()
{
VectorFactory<? extends Vector> vectorFactory =
SparseVectorFactory.getDefault();
AbstractEntropyBasedGlobalTermWeighter instance = new DummyEntropyBasedGlobalTermWeighter();
assertSame(vectorFactory, instance.getVectorFactory());
assertEquals(0, instance.getDocumentCount());
assertNull(instance.getTermDocumentFrequencies());
assertNull(instance.getTermGlobalFrequencies());
assertNull(instance.getTermEntropiesSum());
vectorFactory = VectorFactory.getDefault();
instance = new DummyEntropyBasedGlobalTermWeighter(vectorFactory);
assertSame(vectorFactory, instance.getVectorFactory());
assertEquals(0, instance.getDocumentCount());
assertNull(instance.getTermDocumentFrequencies());
assertNull(instance.getTermGlobalFrequencies());
assertNull(instance.getTermEntropiesSum());
}
/**
* Test of clone method, of class AbstractEntropyBasedGlobalTermWeighter.
*/
@Test
public void testClone()
{
AbstractEntropyBasedGlobalTermWeighter instance =
new DummyEntropyBasedGlobalTermWeighter();
AbstractEntropyBasedGlobalTermWeighter clone = instance.clone();
assertNotSame(clone, instance);
assertEquals(instance.getTermEntropiesSum(), clone.getTermEntropiesSum());
instance.add(new Vector3(3.0, 0.0, 1.0));
clone = instance.clone();
assertNotSame(clone, instance);
assertEquals(instance.getTermEntropiesSum(), clone.getTermEntropiesSum());
assertNotSame(instance.getTermEntropiesSum(), clone.getTermEntropiesSum());
}
/**
* Test of add method, of class AbstractEntropyBasedGlobalTermWeighter.
*/
@Test
public void testAdd()
{
AbstractEntropyBasedGlobalTermWeighter instance =
new DummyEntropyBasedGlobalTermWeighter();
Vector expectedTermEntropiesSum = new Vector3();
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());
expectedTermEntropiesSum.plusEquals(new Vector3(3.0 * Math.log(3.0), 0.0, 0.0));
assertEquals(expectedTermEntropiesSum, instance.getTermEntropiesSum());
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());
expectedTermEntropiesSum.plusEquals(new Vector3());
assertEquals(expectedTermEntropiesSum, instance.getTermEntropiesSum());
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());
expectedTermEntropiesSum.plusEquals(new Vector3());
assertEquals(expectedTermEntropiesSum, instance.getTermEntropiesSum());
}
/**
* Test of remove method, of class AbstractEntropyBasedGlobalTermWeighter.
*/
@Test
public void testRemove()
{
AbstractEntropyBasedGlobalTermWeighter instance =
new DummyEntropyBasedGlobalTermWeighter();
Vector expectedTermEntropiesSum = new Vector3();
instance.add(new Vector3(3.0, 0.0, 1.0));
instance.add(new Vector3());
instance.add(new Vector3(0.0, 1.0, 1.0));
expectedTermEntropiesSum.plusEquals(new Vector3(3.0 * Math.log(3.0), 0.0, 0.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());
assertEquals(expectedTermEntropiesSum, instance.getTermEntropiesSum());
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());
expectedTermEntropiesSum.minusEquals(new Vector3());
assertEquals(expectedTermEntropiesSum, instance.getTermEntropiesSum());
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());
expectedTermEntropiesSum.minusEquals(new Vector3(3.0 * Math.log(3.0), 0.0, 0.0));
assertEquals(expectedTermEntropiesSum, instance.getTermEntropiesSum());
instance.remove(new Vector3(0.0, 1.0, 1.0));
assertEquals(0, instance.getDocumentCount());
assertEquals(new Vector3(), instance.getTermDocumentFrequencies());
assertEquals(new Vector3(), instance.getTermGlobalFrequencies());
expectedTermEntropiesSum.minusEquals(new Vector3());
assertEquals(expectedTermEntropiesSum, instance.getTermEntropiesSum());
}
/**
* Test of getTermEntropiesSum method, of class AbstractEntropyBasedGlobalTermWeighter.
*/
@Test
public void testGetTermEntropiesSum()
{
this.testSetTermEntropiesSum();
}
/**
* Test of setTermEntropiesSum method, of class AbstractEntropyBasedGlobalTermWeighter.
*/
@Test
public void testSetTermEntropiesSum()
{
Vector termEntropiesSum = null;
AbstractEntropyBasedGlobalTermWeighter instance =
new DummyEntropyBasedGlobalTermWeighter();
assertSame(termEntropiesSum, instance.getTermEntropiesSum());
termEntropiesSum = new Vector2();
instance.setTermEntropiesSum(termEntropiesSum);
assertSame(termEntropiesSum, instance.getTermEntropiesSum());
termEntropiesSum = new Vector3();
instance.setTermEntropiesSum(termEntropiesSum);
assertSame(termEntropiesSum, instance.getTermEntropiesSum());
termEntropiesSum = null;
instance.setTermEntropiesSum(termEntropiesSum);
assertSame(termEntropiesSum, instance.getTermEntropiesSum());
}
public static class DummyEntropyBasedGlobalTermWeighter
extends AbstractEntropyBasedGlobalTermWeighter
{
public DummyEntropyBasedGlobalTermWeighter()
{
super();
}
public DummyEntropyBasedGlobalTermWeighter(
final VectorFactory<? extends Vector> vectorFactory)
{
super(vectorFactory);
}
public int getDimensionality()
{
return VectorUtil.safeGetDimensionality(this.termGlobalFrequencies);
}
public Vector getGlobalWeights()
{
throw new UnsupportedOperationException("Not supported.");
}
}
}