/*
* File: VectorMeanCentroidClusterCreatorTest.java
* Authors: Justin Basilico
* Company: Sandia National Laboratories
* Project: Cognitive Framework Lite
*
* Copyright March 20, 2006, 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.learning.algorithm.clustering.cluster;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.mtj.Vector2;
import java.util.ArrayList;
import junit.framework.*;
/**
* This class implements JUnit tests for the following classes:
*
* VectorMeanCentroidClusterCreator
*
* @author Justin Basilico
* @since 1.0
*/
public class VectorMeanCentroidClusterCreatorTest
extends TestCase
{
/**
* Creates a new instance of VectorMeanCentroidClusterCreatorTest.
*
* @param testName The test name.
*/
public VectorMeanCentroidClusterCreatorTest(
String testName)
{
super(testName);
}
/**
* Tests the VectorMeanCentroidClusterCreator class.
*/
public void testVectorMeanCentroidClusterCreator()
{
// Get the cluster creator's instance.
VectorMeanCentroidClusterCreator creator =
VectorMeanCentroidClusterCreator.INSTANCE;
// Create the
ArrayList<Vector> members = new ArrayList<Vector>();
CentroidCluster<Vector> cluster = null;
cluster = creator.createCluster(members);
assertNull(cluster.getCentroid());
assertTrue(cluster.getMembers().isEmpty());
Vector2 v1 = new Vector2(1.0, 1.0);
members.add(v1);
cluster = creator.createCluster(members);
assertNotNull(cluster);
assertNotNull(cluster.getCentroid());
assertEquals(v1, cluster.getCentroid());
assertNotNull(cluster.getMembers());
assertEquals(1, cluster.getMembers().size());
assertTrue(cluster.getMembers().contains(v1));
Vector2 v2 = new Vector2(3.0, 3.0);
members.add(v2);
cluster = creator.createCluster(members);
assertNotNull(cluster);
assertNotNull(cluster.getCentroid());
assertEquals(new Vector2(2.0, 2.0), cluster.getCentroid());
// Test to make sure exceptions are thrown properly.
boolean exceptionThrown = false;
try
{
creator.createCluster(null);
}
catch ( NullPointerException npe )
{
exceptionThrown = true;
}
finally
{
assertTrue(exceptionThrown);
}
}
public void testCreateCluster()
{
// Get the cluster creator's instance.
VectorMeanCentroidClusterCreator creator =
VectorMeanCentroidClusterCreator.INSTANCE;
CentroidCluster<Vector> cluster = creator.createCluster();
assertNotNull(cluster);
assertNotSame(cluster, creator.createCluster());
assertNull(cluster.getCentroid());
assertEquals(0, cluster.getMembers().size());
}
public void testAddClusterMember()
{
// Get the cluster creator's instance.
VectorMeanCentroidClusterCreator creator =
VectorMeanCentroidClusterCreator.INSTANCE;
CentroidCluster<Vector> cluster = creator.createCluster();
Vector2 v1 = new Vector2(1.0, 1.0);
creator.addClusterMember(cluster, v1);
assertNotNull(cluster);
assertNotNull(cluster.getCentroid());
assertEquals(v1, cluster.getCentroid());
assertNotSame(v1, cluster.getCentroid());
assertNotNull(cluster.getMembers());
assertEquals(1, cluster.getMembers().size());
assertTrue(cluster.getMembers().contains(v1));
Vector2 v2 = new Vector2(3.0, 3.0);
creator.addClusterMember(cluster, v2);
assertEquals(new Vector2(2.0, 2.0), cluster.getCentroid());
assertEquals(2, cluster.getMembers().size());
assertTrue(cluster.getMembers().contains(v1));
assertTrue(cluster.getMembers().contains(v2));
Vector2 v3 = new Vector2(2.3, 2.3);
creator.addClusterMember(cluster, v3);
assertNotNull(cluster);
assertNotNull(cluster.getCentroid());
assertEquals(new Vector2(2.1, 2.1), cluster.getCentroid());
assertEquals(3, cluster.getMembers().size());
assertTrue(cluster.getMembers().contains(v1));
assertTrue(cluster.getMembers().contains(v2));
assertTrue(cluster.getMembers().contains(v3));
}
public void testRemoveClusterMember()
{
// Get the cluster creator's instance.
VectorMeanCentroidClusterCreator creator =
VectorMeanCentroidClusterCreator.INSTANCE;
CentroidCluster<Vector> cluster = creator.createCluster();
Vector2 v1 = new Vector2(1.0, 1.0);
assertFalse(creator.removeClusterMember(cluster, v1));
creator.addClusterMember(cluster, v1);
Vector2 v2 = new Vector2(3.0, 3.0);
creator.addClusterMember(cluster, v2);
assertEquals(new Vector2(2.0, 2.0), cluster.getCentroid());
assertEquals(2, cluster.getMembers().size());
assertTrue(cluster.getMembers().contains(v1));
assertTrue(cluster.getMembers().contains(v2));
assertTrue(creator.removeClusterMember(cluster, v2));
assertEquals(v1, cluster.getCentroid());
assertNotSame(v1, cluster.getCentroid());
assertNotNull(cluster.getMembers());
assertEquals(1, cluster.getMembers().size());
assertTrue(cluster.getMembers().contains(v1));
creator.addClusterMember(cluster, v2);
Vector2 v3 = new Vector2(2.3, 2.3);
creator.addClusterMember(cluster, v3);
assertNotNull(cluster);
assertNotNull(cluster.getCentroid());
assertEquals(new Vector2(2.1, 2.1), cluster.getCentroid());
assertEquals(3, cluster.getMembers().size());
assertTrue(cluster.getMembers().contains(v1));
assertTrue(cluster.getMembers().contains(v2));
assertTrue(cluster.getMembers().contains(v3));
Vector2 v4 = new Vector2(-1.0, -2.0);
assertFalse(creator.removeClusterMember(cluster, v4));
assertTrue(creator.removeClusterMember(cluster, v3));
assertEquals(new Vector2(2.0, 2.0), cluster.getCentroid());
assertEquals(2, cluster.getMembers().size());
assertTrue(cluster.getMembers().contains(v1));
assertTrue(cluster.getMembers().contains(v2));
assertTrue(creator.removeClusterMember(cluster, v1));
assertEquals(v2, cluster.getCentroid());
assertEquals(1, cluster.getMembers().size());
assertTrue(cluster.getMembers().contains(v2));
assertTrue(creator.removeClusterMember(cluster, v2));
assertTrue(cluster.getCentroid().isZero(1E-20));
assertTrue(cluster.getMembers().isEmpty());
}
}