/*
* File: DefaultDurationTest.java
* Authors: Justin Basilico
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright June 09, 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.time;
import java.util.Random;
import junit.framework.TestCase;
/**
* Unit tests for class DefaultDuration.
*
* @author Justin Basilico
* @since 3.0
*/
public class DefaultDurationTest
extends TestCase
{
/** Default value of epsilon for equality tests with doubles. */
public static final double EPSILON = 1e-10;
/** The random number generator to use in the tests. */
private Random random;
/**
* Creates a new test.
*
* @param testName The test name.
*/
public DefaultDurationTest(
String testName)
{
super(testName);
this.random = new Random(1);
}
/**
* Test of fromMilliseconds method, of class DefaultDuration.
*/
public void testFromMilliseconds()
{
double milliseconds = 0.0;
DefaultDuration result = DefaultDuration.fromMilliseconds(milliseconds);
assertEquals(milliseconds, result.getTotalMilliseconds());
milliseconds = 1.0;
result = DefaultDuration.fromMilliseconds(milliseconds);
assertEquals(milliseconds, result.getTotalMilliseconds());
milliseconds = 1234.5;
result = DefaultDuration.fromMilliseconds(milliseconds);
assertEquals(milliseconds, result.getTotalMilliseconds());
milliseconds = random.nextDouble();
result = DefaultDuration.fromMilliseconds(milliseconds);
assertEquals(milliseconds, result.getTotalMilliseconds());
milliseconds = -random.nextDouble();
result = DefaultDuration.fromMilliseconds(milliseconds);
assertEquals(milliseconds, result.getTotalMilliseconds());
}
/**
* Test of fromSeconds method, of class DefaultDuration.
*/
public void testFromSeconds()
{
double seconds = 0.0;
DefaultDuration result = DefaultDuration.fromSeconds(seconds);
assertEquals(1000 * seconds, result.getTotalMilliseconds());
assertEquals(seconds, result.getTotalSeconds(), 0.0);
seconds = 1.0;
result = DefaultDuration.fromSeconds(seconds);
assertEquals(1000 * seconds, result.getTotalMilliseconds());
assertEquals(seconds, result.getTotalSeconds(), 0.0);
seconds = 1234.5;
result = DefaultDuration.fromSeconds(seconds);
assertEquals(1000 * seconds, result.getTotalMilliseconds());
assertEquals(seconds, result.getTotalSeconds(), EPSILON);
seconds = random.nextDouble();
result = DefaultDuration.fromSeconds(seconds);
assertEquals(1000 * seconds, result.getTotalMilliseconds());
assertEquals(seconds, result.getTotalSeconds(), EPSILON);
seconds = -random.nextDouble();
result = DefaultDuration.fromSeconds(seconds);
assertEquals(1000 * seconds, result.getTotalMilliseconds());
assertEquals(seconds, result.getTotalSeconds(), EPSILON);
}
/**
* Test of fromMinutes method, of class DefaultDuration.
*/
public void testFromMinutes()
{
double minutes = 0.0;
DefaultDuration result = DefaultDuration.fromMinutes(minutes);
assertEquals(60 * 1000 * minutes, result.getTotalMilliseconds());
assertEquals(minutes, result.getTotalMinutes(), 0.0);
minutes = 1.0;
result = DefaultDuration.fromMinutes(minutes);
assertEquals(60 * 1000 * minutes, result.getTotalMilliseconds());
assertEquals(minutes, result.getTotalMinutes(), 0.0);
minutes = 1234.5;
result = DefaultDuration.fromMinutes(minutes);
assertEquals(60 * 1000 * minutes, result.getTotalMilliseconds());
assertEquals(minutes, result.getTotalMinutes(), EPSILON);
minutes = random.nextDouble();
result = DefaultDuration.fromMinutes(minutes);
assertEquals(60 * 1000 * minutes, result.getTotalMilliseconds());
assertEquals(minutes, result.getTotalMinutes(), EPSILON);
minutes = -random.nextDouble();
result = DefaultDuration.fromMinutes(minutes);
assertEquals(60 * 1000 * minutes, result.getTotalMilliseconds());
assertEquals(minutes, result.getTotalMinutes(), EPSILON);
}
/**
* Test of fromHours method, of class DefaultDuration.
*/
public void testFromHours()
{
double hours = 0.0;
DefaultDuration result = DefaultDuration.fromHours(hours);
assertEquals(60 * 60 * 1000 * hours, result.getTotalMilliseconds());
assertEquals(hours, result.getTotalHours(), 0.0);
hours = 1.0;
result = DefaultDuration.fromHours(hours);
assertEquals(60 * 60 * 1000 * hours, result.getTotalMilliseconds());
assertEquals(hours, result.getTotalHours(), 0.0);
hours = 1234.5;
result = DefaultDuration.fromHours(hours);
assertEquals(60 * 60 * 1000 * hours, result.getTotalMilliseconds());
assertEquals(hours, result.getTotalHours(), EPSILON);
hours = random.nextDouble();
result = DefaultDuration.fromHours(hours);
assertEquals(60 * 60 * 1000 * hours, result.getTotalMilliseconds());
assertEquals(hours, result.getTotalHours(), EPSILON);
hours = -random.nextDouble();
result = DefaultDuration.fromHours(hours);
assertEquals(60 * 60 * 1000 * hours, result.getTotalMilliseconds());
assertEquals(hours, result.getTotalHours(), EPSILON);
}
/**
* Test of fromDays method, of class DefaultDuration.
*/
public void testFromDays()
{
double days = 0.0;
DefaultDuration result = DefaultDuration.fromDays(days);
assertEquals(24 * 60 * 60 * 1000 * days, result.getTotalMilliseconds());
assertEquals(days, result.getTotalDays(), 0.0);
days = 1.0;
result = DefaultDuration.fromDays(days);
assertEquals(24 * 60 * 60 * 1000 * days, result.getTotalMilliseconds());
assertEquals(days, result.getTotalDays(), 0.0);
days = 1234.5;
result = DefaultDuration.fromDays(days);
assertEquals(24 * 60 * 60 * 1000 * days, result.getTotalMilliseconds());
assertEquals(days, result.getTotalDays(), EPSILON);
days = random.nextDouble();
result = DefaultDuration.fromDays(days);
assertEquals(24 * 60 * 60 * 1000 * days, result.getTotalMilliseconds());
assertEquals(days, result.getTotalDays(), EPSILON);
days = -random.nextDouble();
result = DefaultDuration.fromDays(days);
assertEquals(24 * 60 * 60 * 1000 * days, result.getTotalMilliseconds());
assertEquals(days, result.getTotalDays(), EPSILON);
}
/**
* Test of equals method, of class DefaultDuration.
*/
public void testEquals()
{
DefaultDuration zero = DefaultDuration.fromMilliseconds(0.0);
DefaultDuration day = DefaultDuration.fromDays(1.0);
DefaultDuration randomHours = DefaultDuration.fromHours(random.nextDouble());
assertTrue(zero.equals(zero));
assertTrue(zero.equals(DefaultDuration.fromMilliseconds(0.0)));
assertTrue(zero.equals(zero.negative()));
assertTrue(zero.equals(zero.negative().negative()));
assertFalse(zero.equals(null));
assertTrue(zero.equals((Object) DefaultDuration.ZERO));
assertFalse(zero.equals((Object) day));
assertFalse(zero.equals(randomHours));
assertTrue(day.equals(day));
assertTrue(day.equals(DefaultDuration.fromDays(1.0)));
assertFalse(day.equals(day.negative()));
assertTrue(day.equals(day.negative().negative()));
assertFalse(day.equals(null));
assertTrue(day.equals(DefaultDuration.DAY));
assertFalse(day.equals(zero));
assertFalse(day.equals(randomHours));
assertTrue(randomHours.equals(randomHours));
assertTrue(randomHours.equals(DefaultDuration.fromHours(randomHours.getTotalHours())));
assertFalse(randomHours.equals(randomHours.negative()));
assertTrue(randomHours.equals(randomHours.negative().negative()));
assertFalse(randomHours.equals(null));
assertFalse(randomHours.equals(zero));
assertFalse(randomHours.equals(day));
}
/**
* Test of hashCode method, of class DefaultDuration.
*/
public void testHashCode()
{
double days = random.nextDouble();
DefaultDuration instance = DefaultDuration.fromDays(days);
int hashCode = instance.hashCode();
assertEquals(hashCode, instance.hashCode());
assertEquals(hashCode, DefaultDuration.fromDays(days).hashCode());
assertFalse(hashCode == DefaultDuration.ZERO.hashCode());
}
/**
* Test of compareTo method, of class DefaultDuration.
*/
public void testCompareTo()
{
double days = random.nextDouble();
DefaultDuration instance = DefaultDuration.fromDays(days);
assertEquals(0, instance.compareTo(instance));
assertEquals(0, instance.compareTo(DefaultDuration.fromDays(days)));
assertTrue(DefaultDuration.MILLISECOND.compareTo(DefaultDuration.MINUTE) < 0);
assertTrue(DefaultDuration.MINUTE.compareTo(DefaultDuration.MILLISECOND) > 0);
}
/**
* Test of negative method, of class DefaultDuration.
*/
public void testNegative()
{
double days = random.nextDouble();
DefaultDuration instance = DefaultDuration.fromDays(days);
assertEquals(days, instance.getTotalDays(), EPSILON);
assertEquals(-days, instance.negative().getTotalDays(), EPSILON);
assertEquals(days, instance.negative().negative().getTotalDays(), EPSILON);
}
/**
* Test of absoluteValue method, of class DefaultDuration.
*/
public void testAbsoluteValue()
{
double days = random.nextDouble();
DefaultDuration instance = DefaultDuration.fromDays(days);
assertEquals(days, instance.absoluteValue().getTotalDays(), EPSILON);
assertEquals(days, instance.negative().absoluteValue().getTotalDays(), EPSILON);
assertEquals(days, instance.negative().negative().absoluteValue().getTotalDays(), EPSILON);
instance = DefaultDuration.fromDays(-days);
assertEquals(days, instance.absoluteValue().getTotalDays(), EPSILON);
assertEquals(days, instance.negative().absoluteValue().getTotalDays(), EPSILON);
assertEquals(days, instance.negative().negative().absoluteValue().getTotalDays(), EPSILON);
}
/**
* Test of plus method, of class DefaultDuration.
*/
public void testPlus()
{
double milliseconds = random.nextDouble();
DefaultDuration instance = DefaultDuration.fromMilliseconds(milliseconds);
assertEquals(milliseconds, instance.plus(DefaultDuration.ZERO).getTotalMilliseconds(), 0.0);
assertEquals(milliseconds + 1.0, instance.plus(DefaultDuration.MILLISECOND).getTotalMilliseconds(), 0.0);
assertEquals(milliseconds + 1000.0, instance.plus(DefaultDuration.SECOND).getTotalMilliseconds(), 0.0);
assertEquals(2.0 * milliseconds, instance.plus(instance).getTotalMilliseconds(), 0.0);
assertEquals(3.0 * milliseconds, instance.plus(instance).plus(instance).getTotalMilliseconds(), 0.0);
}
/**
* Test of minus method, of class DefaultDuration.
*/
public void testMinus()
{
double milliseconds = random.nextDouble();
DefaultDuration instance = DefaultDuration.fromMilliseconds(milliseconds);
assertEquals(milliseconds, instance.minus(DefaultDuration.ZERO).getTotalMilliseconds(), 0.0);
assertEquals(milliseconds - 1.0, instance.minus(DefaultDuration.MILLISECOND).getTotalMilliseconds(), 0.0);
assertEquals(milliseconds - 1000.0, instance.minus(DefaultDuration.SECOND).getTotalMilliseconds(), 0.0);
assertEquals(0.0, instance.minus(instance).getTotalMilliseconds(), 0.0);
assertEquals(-milliseconds, instance.minus(instance).minus(instance).getTotalMilliseconds(), 0.0);
}
/**
* Test of times method, of class DefaultDuration.
*/
public void testTimes()
{
double days = random.nextDouble();
DefaultDuration instance = DefaultDuration.fromDays(days);
double milliseconds = instance.getTotalMilliseconds();
double scalar = random.nextDouble();
assertEquals(scalar * milliseconds,
instance.times(scalar).getTotalMilliseconds(), 0.0);
assertEquals(0.0, instance.times(0.0).getTotalMilliseconds(), 0.0);
assertEquals(milliseconds, instance.times(1.0).getTotalMilliseconds(), 0.0);
assertEquals(-milliseconds, instance.times(-1.0).getTotalMilliseconds(), 0.0);
assertEquals(DefaultDuration.fromDays(days * scalar).getTotalDays(),
instance.times(scalar).getTotalDays(), EPSILON);
assertEquals(days, instance.times(1.0).getTotalDays(), EPSILON);
assertEquals(-days, instance.times(-1.0).getTotalDays(), EPSILON);
}
/**
* Test of divide method, of class DefaultDuration.
*/
public void testDivide()
{
double days1 = random.nextDouble();
double days2 = random.nextDouble();
DefaultDuration d1 = DefaultDuration.fromDays(days1);
DefaultDuration d2 = DefaultDuration.fromDays(days2);
assertEquals(1.0, d1.divide(d1));
assertEquals(1.0, d2.divide(d2));
assertEquals(days1 / days2, d1.divide(d2), EPSILON);
assertEquals(days2 / days1, d2.divide(d1), EPSILON);
assertEquals(0.0, DefaultDuration.ZERO.divide(d1));
assertEquals(0.0, DefaultDuration.ZERO.divide(d2));
double days = random.nextDouble();
DefaultDuration instance = DefaultDuration.fromDays(days);
double milliseconds = instance.getTotalMilliseconds();
double scalar = random.nextDouble();
assertEquals(milliseconds / scalar,
instance.divide(scalar).getTotalMilliseconds(), 0.0);
assertEquals(milliseconds, instance.divide(1.0).getTotalMilliseconds(), 0.0);
assertEquals(-milliseconds, instance.divide(-1.0).getTotalMilliseconds(), 0.0);
assertEquals(DefaultDuration.fromDays(days / scalar).getTotalDays(),
instance.divide(scalar).getTotalDays(), EPSILON);
assertEquals(days, instance.divide(1.0).getTotalDays(), EPSILON);
assertEquals(-days, instance.divide(-1.0).getTotalDays(), EPSILON);
assertEquals(10.0 * milliseconds, instance.divide(0.1).getTotalMilliseconds(), 0.0);
}
/**
* Test of getTotalMilliseconds method, of class DefaultDuration.
*/
public void testGetTotalMilliseconds()
{
double milliseconds = random.nextDouble();
DefaultDuration instance = DefaultDuration.fromMilliseconds(milliseconds);
assertEquals(milliseconds, instance.getTotalMilliseconds(), 0.0);
}
/**
* Test of getTotalSeconds method, of class DefaultDuration.
*/
public void testGetTotalSeconds()
{
double milliseconds = random.nextDouble();
DefaultDuration instance = DefaultDuration.fromMilliseconds(milliseconds);
assertEquals(milliseconds / 1000, instance.getTotalSeconds(), 0.0);
}
/**
* Test of getTotalMinutes method, of class DefaultDuration.
*/
public void testGetTotalMinutes()
{
double milliseconds = random.nextDouble();
DefaultDuration instance = DefaultDuration.fromMilliseconds(milliseconds);
assertEquals(milliseconds / (60 * 1000), instance.getTotalMinutes(), 0.0);
}
/**
* Test of getTotalHours method, of class DefaultDuration.
*/
public void testGetTotalHours()
{
double milliseconds = random.nextDouble();
DefaultDuration instance = DefaultDuration.fromMilliseconds(milliseconds);
assertEquals(milliseconds / (60 * 60 * 1000), instance.getTotalHours(), 0.0);
}
/**
* Test of getTotalDays method, of class DefaultDuration.
*/
public void testGetTotalDays()
{
double milliseconds = random.nextDouble();
DefaultDuration instance = DefaultDuration.fromMilliseconds(milliseconds);
assertEquals(milliseconds / (24 * 60 * 60 * 1000), instance.getTotalDays(), 0.0);
}
/**
* Test of getMillisecondsPart method, of class DefaultDuration.
*/
public void testGetMillisecondsPart()
{
int millisecondsPart = random.nextInt(1000);
int secondsPart = random.nextInt(60);
int minutesPart = random.nextInt(60);
int hoursPart = random.nextInt(24);
int daysPart = random.nextInt(100000);
Duration instance = DefaultDuration.ZERO;
instance = instance.plus(DefaultDuration.MILLISECOND.times(millisecondsPart));
instance = instance.plus(DefaultDuration.SECOND.times(secondsPart));
instance = instance.plus(DefaultDuration.MINUTE.times(minutesPart));
instance = instance.plus(DefaultDuration.HOUR.times(hoursPart));
instance = instance.plus(DefaultDuration.DAY.times(daysPart));
assertEquals(millisecondsPart, instance.getMillisecondsPart());
assertEquals(-millisecondsPart, instance.negative().getMillisecondsPart());
}
/**
* Test of getSecondsPart method, of class DefaultDuration.
*/
public void testGetSecondsPart()
{
int millisecondsPart = random.nextInt(1000);
int secondsPart = random.nextInt(60);
int minutesPart = random.nextInt(60);
int hoursPart = random.nextInt(24);
int daysPart = random.nextInt(100000);
Duration instance = DefaultDuration.ZERO;
instance = instance.plus(DefaultDuration.MILLISECOND.times(millisecondsPart));
instance = instance.plus(DefaultDuration.SECOND.times(secondsPart));
instance = instance.plus(DefaultDuration.MINUTE.times(minutesPart));
instance = instance.plus(DefaultDuration.HOUR.times(hoursPart));
instance = instance.plus(DefaultDuration.DAY.times(daysPart));
assertEquals(secondsPart, instance.getSecondsPart());
assertEquals(-secondsPart, instance.negative().getSecondsPart());
}
/**
* Test of getMinutesPart method, of class DefaultDuration.
*/
public void testGetMinutesPart()
{
int millisecondsPart = random.nextInt(1000);
int secondsPart = random.nextInt(60);
int minutesPart = random.nextInt(60);
int hoursPart = random.nextInt(24);
int daysPart = random.nextInt(100000);
Duration instance = DefaultDuration.ZERO;
instance = instance.plus(DefaultDuration.MILLISECOND.times(millisecondsPart));
instance = instance.plus(DefaultDuration.SECOND.times(secondsPart));
instance = instance.plus(DefaultDuration.MINUTE.times(minutesPart));
instance = instance.plus(DefaultDuration.HOUR.times(hoursPart));
instance = instance.plus(DefaultDuration.DAY.times(daysPart));
assertEquals(minutesPart, instance.getMinutesPart());
assertEquals(-minutesPart, instance.negative().getMinutesPart());
}
/**
* Test of getHoursPart method, of class DefaultDuration.
*/
public void testGetHoursPart()
{
int millisecondsPart = random.nextInt(1000);
int secondsPart = random.nextInt(60);
int minutesPart = random.nextInt(60);
int hoursPart = random.nextInt(24);
int daysPart = random.nextInt(100000);
Duration instance = DefaultDuration.ZERO;
instance = instance.plus(DefaultDuration.MILLISECOND.times(millisecondsPart));
instance = instance.plus(DefaultDuration.SECOND.times(secondsPart));
instance = instance.plus(DefaultDuration.MINUTE.times(minutesPart));
instance = instance.plus(DefaultDuration.HOUR.times(hoursPart));
instance = instance.plus(DefaultDuration.DAY.times(daysPart));
assertEquals(hoursPart, instance.getHoursPart());
assertEquals(-hoursPart, instance.negative().getHoursPart());
}
/**
* Test of getDaysPart method, of class DefaultDuration.
*/
public void testGetDaysPart()
{
int millisecondsPart = random.nextInt(1000);
int secondsPart = random.nextInt(60);
int minutesPart = random.nextInt(60);
int hoursPart = random.nextInt(24);
int daysPart = random.nextInt(100000);
Duration instance = DefaultDuration.ZERO;
instance = instance.plus(DefaultDuration.MILLISECOND.times(millisecondsPart));
instance = instance.plus(DefaultDuration.SECOND.times(secondsPart));
instance = instance.plus(DefaultDuration.MINUTE.times(minutesPart));
instance = instance.plus(DefaultDuration.HOUR.times(hoursPart));
instance = instance.plus(DefaultDuration.DAY.times(daysPart));
assertEquals(daysPart, instance.getDaysPart());
assertEquals(-daysPart, instance.negative().getDaysPart());
}
/**
* Test of toString method, of class DefaultDuration.
*/
public void testToString()
{
assertEquals("00:00:00", DefaultDuration.ZERO.toString());
int millisecondsPart = 12;
int secondsPart = 3;
int minutesPart = 4;
int hoursPart = 5;
int daysPart = 6789;
Duration instance = DefaultDuration.ZERO;
instance = instance.plus(DefaultDuration.MILLISECOND.times(millisecondsPart));
instance = instance.plus(DefaultDuration.SECOND.times(secondsPart));
instance = instance.plus(DefaultDuration.MINUTE.times(minutesPart));
instance = instance.plus(DefaultDuration.HOUR.times(hoursPart));
instance = instance.plus(DefaultDuration.DAY.times(daysPart));
String expected = "6789.05:04:03.012";
assertEquals(expected, instance.toString());
assertEquals("-" + expected, instance.negative().toString());
}
}