/*
* File: DominanceGlobalTermWeighterTest.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.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 DominanceGlobalTermWeighter.
*
* @author Justin Basilico
* @since 3.0
*/
public class DominanceGlobalTermWeighterTest
{
/**
* Creates a new test.
*/
public DominanceGlobalTermWeighterTest()
{
}
/**
* Test of constructors of class DominanceGlobalTermWeighter.
*/
@Test
public void testConstructors()
{
VectorFactory<? extends Vector> vectorFactory =
SparseVectorFactory.getDefault();
DominanceGlobalTermWeighter instance = new DominanceGlobalTermWeighter();
assertSame(vectorFactory, instance.getVectorFactory());
assertNull(instance.getDominance());
vectorFactory = VectorFactory.getDefault();
instance = new DominanceGlobalTermWeighter(vectorFactory);
assertSame(vectorFactory, instance.getVectorFactory());
assertNull(instance.getDominance());
}
/**
* Test of clone method, of class DominanceGlobalTermWeighter.
*/
@Test
public void testClone()
{
DominanceGlobalTermWeighter instance = new DominanceGlobalTermWeighter();
DominanceGlobalTermWeighter 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.getDominance(), clone.getDominance());
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.getDominance(), clone.getDominance());
assertNotSame(instance.getDominance(), clone.getDominance());
}
/**
* Test of add method, of class DominanceGlobalTermWeighter.
*/
@Test
public void testAdd()
{
DominanceGlobalTermWeighter instance = new DominanceGlobalTermWeighter();
assertEquals(0, instance.getDocumentCount());
assertNull(instance.dominance);
instance.add(new Vector3(3.0, 0.0, 1.0));
assertEquals(1, instance.getDocumentCount());
assertNull(instance.dominance);
instance.add(new Vector3());
assertEquals(2, instance.getDocumentCount());
assertNull(instance.dominance);
instance.add(VectorFactory.getDefault().createVector(4));
assertEquals(3, instance.getDocumentCount());
assertNull(instance.dominance);
assertNotNull(instance.getDominance());
assertNotNull(instance.dominance);
boolean exceptionThrown = false;
try
{
instance.add(new Vector3());
}
catch (DimensionalityMismatchException e)
{
exceptionThrown = true;
}
finally
{
assertTrue(exceptionThrown);
}
assertEquals(3, instance.getDocumentCount());
assertNotNull(instance.dominance);
}
/**
* Test of remove method, of class DominanceGlobalTermWeighter.
*/
@Test
public void testRemove()
{
DominanceGlobalTermWeighter instance = new DominanceGlobalTermWeighter();
instance.add(new Vector3(3.0, 0.0, 1.0));
instance.add(new Vector3());
instance.add(new Vector3(0.0, 1.0, 1.0));
assertNull(instance.dominance);
assertEquals(3, instance.getDocumentCount());
assertEquals(new Vector3(3.0, 1.0, 2.0), instance.getTermGlobalFrequencies());
instance.remove(new Vector3());
assertEquals(2, instance.getDocumentCount());
assertEquals(new Vector3(3.0, 1.0, 2.0), instance.getTermGlobalFrequencies());
assertNull(instance.dominance);
instance.remove(new Vector3(3.0, 0.0, 1.0));
assertEquals(1, instance.getDocumentCount());
assertEquals(new Vector3(0.0, 1.0, 1.0), instance.getTermGlobalFrequencies());
assertNull(instance.dominance);
instance.remove(new Vector3(0.0, 1.0, 1.0));
assertEquals(0, instance.getDocumentCount());
assertEquals(new Vector3(), instance.getTermGlobalFrequencies());
assertNull(instance.dominance);
}
/**
* Test of getGlobalWeights method, of class DominanceGlobalTermWeighter.
*/
@Test
public void testGetGlobalWeights()
{
DominanceGlobalTermWeighter instance = new DominanceGlobalTermWeighter();
assertSame(instance.getDominance(), 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.getDominance(), instance.getGlobalWeights());
}
/**
* Test of getDimensionality method, of class DominanceGlobalTermWeighter.
*/
@Test
public void testGetDimensionality()
{
DominanceGlobalTermWeighter instance = new DominanceGlobalTermWeighter();
assertEquals(-1, instance.getDimensionality());
instance.add(new Vector3());
assertEquals(3, instance.getDimensionality());
}
/**
* Test of getDominance method, of class DominanceGlobalTermWeighter.
*/
@Test
public void testGetDominance()
{
DominanceGlobalTermWeighter instance = new DominanceGlobalTermWeighter();
assertNull(instance.getDominance());
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.886, 0.0, 0.707);
Vector actual = instance.getDominance();
assertTrue(expected.equals(actual, epsilon));
instance.add(new Vector3(0.0, 1.0, 0.0));
expected = new Vector3(0.709, 0.2, 0.565);
actual = instance.getDominance();
System.out.println("Actual: "+ actual);
assertTrue(expected.equals(actual, epsilon));
// Test handling of dense.
instance.setVectorFactory(VectorFactory.getDefault());
instance.setDominance(null);
actual = instance.getDominance();
assertTrue(expected.equals(actual, epsilon));
}
}