package au.gov.ga.earthsci.worldwind.common.util;
import static au.gov.ga.earthsci.worldwind.test.util.TestUtils.createDate;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.Date;
import org.junit.Test;
/**
* Unit tests for the {@link Range} class
*/
public class RangeTest
{
@Test
public void testIntegerClosedRange()
{
Range<Integer> range = new Range<Integer>(0, 10);
assertTrue(range.isInclusiveLeft());
assertTrue(range.isInclusiveRight());
assertFalse(range.isOpenLeft());
assertFalse(range.isOpenRight());
assertFalse(range.contains(-1));
assertTrue(range.contains(0));
assertTrue(range.contains(1));
assertTrue(range.contains(9));
assertTrue(range.contains(10));
assertFalse(range.contains(11));
}
@Test
public void testDoubleClosedRange()
{
Range<Double> range = new Range<Double>(0d, 10d);
assertTrue(range.isInclusiveLeft());
assertTrue(range.isInclusiveRight());
assertFalse(range.isOpenLeft());
assertFalse(range.isOpenRight());
assertFalse(range.contains(-0.1d));
assertTrue(range.contains(0d));
assertTrue(range.contains(1d));
assertTrue(range.contains(9d));
assertTrue(range.contains(10d));
assertFalse(range.contains(10.1d));
}
@Test
public void testDateClosedRange()
{
Range<Date> range = new Range<Date>(createDate("2010-01-01"), createDate("2010-01-31"));
assertTrue(range.isInclusiveLeft());
assertTrue(range.isInclusiveRight());
assertFalse(range.isOpenLeft());
assertFalse(range.isOpenRight());
assertFalse(range.contains(createDate("2009-12-31")));
assertTrue(range.contains(createDate("2010-01-01")));
assertTrue(range.contains(createDate("2010-01-02")));
assertTrue(range.contains(createDate("2010-01-30")));
assertTrue(range.contains(createDate("2010-01-31")));
assertFalse(range.contains(createDate("2010-02-01")));
}
@Test
public void testIntegerOpenRange()
{
Range<Integer> range = new Range<Integer>(null, 10);
assertFalse(range.isInclusiveLeft());
assertTrue(range.isInclusiveRight());
assertTrue(range.isOpenLeft());
assertFalse(range.isOpenRight());
assertTrue(range.contains(-1));
assertTrue(range.contains(0));
assertTrue(range.contains(1));
assertTrue(range.contains(9));
assertTrue(range.contains(10));
assertFalse(range.contains(11));
}
@Test
public void testIntegerNonInclusiveRange()
{
Range<Integer> range = new Range<Integer>(0, false, 10, false);
assertFalse(range.isInclusiveLeft());
assertFalse(range.isInclusiveRight());
assertFalse(range.isOpenLeft());
assertFalse(range.isOpenRight());
assertFalse(range.contains(-1));
assertFalse(range.contains(0));
assertTrue(range.contains(1));
assertTrue(range.contains(9));
assertFalse(range.contains(10));
assertFalse(range.contains(11));
}
@Test
public void testIntegerUnionClosedOverlappingRanges()
{
Range<Integer> range1 = new Range<Integer>(0, 10);
Range<Integer> range2 = new Range<Integer>(5, 15);
Range<Integer> union1 = range1.union(range2);
Range<Integer> union2 = range2.union(range1);
assertEquals(union1, union2);
assertTrue(union1.isInclusiveLeft());
assertTrue(union1.isInclusiveRight());
assertFalse(union1.isOpenLeft());
assertFalse(union1.isOpenRight());
assertFalse(union1.contains(-1));
assertTrue(union1.contains(0));
assertTrue(union1.contains(1));
assertTrue(union1.contains(14));
assertTrue(union1.contains(15));
assertFalse(union1.contains(16));
}
@Test
public void testIntegerUnionClosedNonoverlappingRanges()
{
Range<Integer> range1 = new Range<Integer>(0, 10);
Range<Integer> range2 = new Range<Integer>(15, 20);
Range<Integer> union1 = range1.union(range2);
Range<Integer> union2 = range2.union(range1);
assertEquals(union1, union2);
assertTrue(union1.isInclusiveLeft());
assertTrue(union1.isInclusiveRight());
assertFalse(union1.isOpenLeft());
assertFalse(union1.isOpenRight());
assertFalse(union1.contains(-1));
assertTrue(union1.contains(0));
assertTrue(union1.contains(1));
assertTrue(union1.contains(13));
assertTrue(union1.contains(19));
assertTrue(union1.contains(20));
assertFalse(union1.contains(21));
}
@Test
public void testIntegerUnionOpenRanges()
{
Range<Integer> range1 = new Range<Integer>(null, 10);
Range<Integer> range2 = new Range<Integer>(5, false, 15, false);
Range<Integer> union1 = range1.union(range2);
Range<Integer> union2 = range2.union(range1);
assertEquals(union1, union2);
assertFalse(union1.isInclusiveLeft());
assertFalse(union1.isInclusiveRight());
assertTrue(union1.isOpenLeft());
assertFalse(union1.isOpenRight());
assertTrue(union1.contains(-1));
assertTrue(union1.contains(0));
assertTrue(union1.contains(1));
assertTrue(union1.contains(14));
assertFalse(union1.contains(15));
assertFalse(union1.contains(16));
}
}