/*
* File: RandomDataPartitionerTest.java
* Authors: Justin Basilico
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright September 26, 2007, 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.data;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Random;
import junit.framework.TestCase;
/**
* This class implements JUnit tests for the following classes:
*
* @author Justin Basilico
* @since 2.0
*/
public class RandomDataPartitionerTest
extends TestCase
{
public RandomDataPartitionerTest(
String testName)
{
super(testName);
}
public void testConstants()
{
assertEquals(0.5, RandomDataPartitioner.DEFAULT_TRAINING_PERCENT);
}
public void testConstructors()
{
RandomDataPartitioner<Double> instance =
new RandomDataPartitioner<Double>();
assertEquals(RandomDataPartitioner.DEFAULT_TRAINING_PERCENT,
instance.getTrainingPercent());
assertNotNull(instance.getRandom());
double trainingPercent = Math.random();
Random random = new Random();
instance = new RandomDataPartitioner<Double>(trainingPercent, random);
assertEquals(trainingPercent, instance.getTrainingPercent());
assertSame(random, instance.getRandom());
}
/**
* Test of partition method, of class gov.sandia.cognition.learning.util.data.RandomDataPartitioner.
*/
public void testCreatePartition()
{
Collection<Double> data = new ArrayList<Double>();
double trainingPercent = 0.66;
RandomDataPartitioner<Double> instance =
new RandomDataPartitioner<Double>(trainingPercent, new Random());
int count = 25;
for (int i = 0; i < count; i++)
{
data.add(Math.random());
if ( i > 1 )
{
checkPartition(data, instance.createPartition(data));
}
}
data.clear();
boolean exceptionThrown = false;
try
{
instance.createPartition(data);
}
catch ( IllegalArgumentException e )
{
exceptionThrown = true;
}
finally
{
assertTrue(exceptionThrown);
}
data.add(Math.random());
exceptionThrown = false;
try
{
instance.createPartition(data);
}
catch ( IllegalArgumentException e )
{
exceptionThrown = true;
}
finally
{
assertTrue(exceptionThrown);
}
}
public void checkPartition(
Collection<Double> data,
PartitionedDataset<Double> partition)
{
int count = data.size();
int trainSize = partition.getTrainingSet().size();
int testSize = partition.getTestingSet().size();
assertTrue(trainSize > 0);
assertTrue(testSize > 0);
assertEquals(count, trainSize + testSize);
for ( Double value : data )
{
boolean inTrain = partition.getTrainingSet().contains(value);
boolean inTest = partition.getTestingSet().contains(value);
assertTrue(inTrain ^ inTest);
}
}
/**
* Test of getTrainingPercent method, of class gov.sandia.cognition.learning.util.data.RandomDataPartitioner.
*/
public void testGetTrainingPercent()
{
this.testSetTrainingPercent();
}
/**
* Test of setTrainingPercent method, of class gov.sandia.cognition.learning.util.data.RandomDataPartitioner.
*/
public void testSetTrainingPercent()
{
RandomDataPartitioner<Double> instance =
new RandomDataPartitioner<Double>();
assertEquals(RandomDataPartitioner.DEFAULT_TRAINING_PERCENT,
instance.getTrainingPercent());
double trainingPercent = Math.random();
instance.setTrainingPercent(trainingPercent);
assertEquals(trainingPercent, instance.getTrainingPercent());
trainingPercent = Math.random();
instance.setTrainingPercent(trainingPercent);
assertEquals(trainingPercent, instance.getTrainingPercent());
boolean exceptionThrown = false;
try
{
instance.setTrainingPercent(0.0);
}
catch ( IllegalArgumentException e )
{
exceptionThrown = true;
}
finally
{
assertTrue(exceptionThrown);
}
exceptionThrown = false;
try
{
instance.setTrainingPercent(1.0);
}
catch ( IllegalArgumentException e )
{
exceptionThrown = true;
}
finally
{
assertTrue(exceptionThrown);
}
}
}