package it.unimi.dsi.util;
import static it.unimi.dsi.util.Intervals.EMPTY_INTERVAL;
import it.unimi.dsi.fastutil.ints.IntIterators;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.ints.IntRBTreeSet;
import it.unimi.dsi.fastutil.ints.IntSortedSet;
import it.unimi.dsi.fastutil.ints.IntSortedSets;
import it.unimi.dsi.util.Interval;
import java.util.Arrays;
import junit.framework.TestCase;
public class IntervalTest extends TestCase {
public void testLength() {
assertEquals( 0, EMPTY_INTERVAL.length() );
assertEquals( 1, Interval.valueOf( 0 ).length() );
assertEquals( 2, Interval.valueOf( 0, 1 ).length() );
}
public void testContainsElement() {
assertTrue( Interval.valueOf( 0 ).contains( 0 ) );
assertFalse( Interval.valueOf( 0 ).contains( 1 ) );
assertFalse( Interval.valueOf( 0 ).contains( -1 ) );
assertTrue( Interval.valueOf( 0, 1 ).contains( 0 ) );
assertTrue( Interval.valueOf( 0, 1 ).contains( 1 ) );
assertFalse( Interval.valueOf( 0 ).contains( 2 ) );
assertFalse( Interval.valueOf( 0 ).contains( -1 ) );
assertFalse( EMPTY_INTERVAL.contains( 0 ) );
assertFalse( EMPTY_INTERVAL.contains( 1 ) );
assertFalse( EMPTY_INTERVAL.contains( -1 ) );
}
public void testContainsInterval() {
assertTrue( Interval.valueOf( 0 ).contains( Interval.valueOf( 0 ) ) );
assertTrue( Interval.valueOf( 0 ).contains( EMPTY_INTERVAL ) );
assertFalse( Interval.valueOf( 0 ).contains( Interval.valueOf( 0, 1 ) ) );
assertFalse( Interval.valueOf( 0 ).contains( Interval.valueOf( -1, 0 ) ) );
assertTrue( Interval.valueOf( 0, 1 ).contains( Interval.valueOf( 0 ) ) );
assertTrue( Interval.valueOf( 0, 1 ).contains( Interval.valueOf( 1 ) ) );
assertTrue( Interval.valueOf( 0, 1 ).contains( Interval.valueOf( 0, 1 ) ) );
assertTrue( Interval.valueOf( 0, 1 ).contains( EMPTY_INTERVAL ) );
assertFalse( Interval.valueOf( 0 ).contains( Interval.valueOf( -1, 0 ) ) );
assertFalse( Interval.valueOf( 0 ).contains( Interval.valueOf( 1, 2 ) ) );
assertFalse( Interval.valueOf( 0 ).contains( Interval.valueOf( -1, 2 ) ) );
assertTrue( EMPTY_INTERVAL.contains( EMPTY_INTERVAL ) );
assertFalse( EMPTY_INTERVAL.contains( Interval.valueOf( 0 ) ) );
assertFalse( EMPTY_INTERVAL.contains( Interval.valueOf( 1 ) ) );
assertFalse( EMPTY_INTERVAL.contains( Interval.valueOf( 0, 1 ) ) );
}
public void testContainsRadius() {
boolean ok = false;
try {
EMPTY_INTERVAL.contains( 0, 1 );
}
catch( IllegalArgumentException e ) {
ok = true;
}
assertTrue( ok );
assertTrue( Interval.valueOf( 0 ).contains( 1, 1 ) );
assertFalse( Interval.valueOf( 0 ).contains( 2, 1 ) );
ok = false;
try {
EMPTY_INTERVAL.contains( 0, 1, 2 );
}
catch( IllegalArgumentException e ) {
ok = true;
}
assertTrue( ok );
assertTrue( Interval.valueOf( 0 ).contains( 1, 1, 2 ) );
assertTrue( Interval.valueOf( 0 ).contains( 2, 1, 2 ) );
assertFalse( Interval.valueOf( 0 ).contains( 3, 1, 2 ) );
}
public void testCompareInt() {
boolean ok = false;
try {
EMPTY_INTERVAL.compareTo( 0 );
}
catch( IllegalArgumentException e ) {
ok = true;
}
assertTrue( ok );
assertEquals( -1, Interval.valueOf( 0 ).compareTo( -1 ) );
assertEquals( 0, Interval.valueOf( 0 ).compareTo( 0 ) );
assertEquals( 1, Interval.valueOf( 0 ).compareTo( 1 ) );
assertEquals( -1, Interval.valueOf( 0, 1 ).compareTo( -1 ) );
assertEquals( 0, Interval.valueOf( 0, 1 ).compareTo( 0 ) );
assertEquals( 0, Interval.valueOf( 0, 1 ).compareTo( 1 ) );
assertEquals( 1, Interval.valueOf( 0, 1 ).compareTo( 2 ) );
ok = false;
try {
EMPTY_INTERVAL.compareTo( 0, 1 );
}
catch( IllegalArgumentException e ) {
ok = true;
}
assertTrue( ok );
assertEquals( -1, Interval.valueOf( 0 ).compareTo( -2, 1 ) );
assertEquals( 0, Interval.valueOf( 0 ).compareTo( -1, 1 ) );
assertEquals( 0, Interval.valueOf( 0 ).compareTo( 0, 1 ) );
assertEquals( 0, Interval.valueOf( 0 ).compareTo( 1, 1 ) );
assertEquals( 1, Interval.valueOf( 0 ).compareTo( 2, 1 ) );
assertEquals( -1, Interval.valueOf( 0, 1 ).compareTo( -2, 1 ) );
assertEquals( 0, Interval.valueOf( 0, 1 ).compareTo( -1, 1 ) );
assertEquals( 0, Interval.valueOf( 0, 1 ).compareTo( 0, 1 ) );
assertEquals( 0, Interval.valueOf( 0, 1 ).compareTo( 1, 1 ) );
assertEquals( 0, Interval.valueOf( 0, 1 ).compareTo( 2, 1 ) );
assertEquals( 1, Interval.valueOf( 0, 1 ).compareTo( 3, 1 ) );
ok = false;
try {
EMPTY_INTERVAL.compareTo( 0, 1, 2 );
}
catch( IllegalArgumentException e ) {
ok = true;
}
assertTrue( ok );
assertEquals( -1, Interval.valueOf( 0 ).compareTo( -2, 1, 2 ) );
assertEquals( 0, Interval.valueOf( 0 ).compareTo( -1, 1, 2 ) );
assertEquals( 0, Interval.valueOf( 0 ).compareTo( 0, 1, 2 ) );
assertEquals( 0, Interval.valueOf( 0 ).compareTo( 1, 1, 2 ) );
assertEquals( 0, Interval.valueOf( 0 ).compareTo( 2, 1, 2 ) );
assertEquals( 1, Interval.valueOf( 0 ).compareTo( 3, 1, 2 ) );
assertEquals( -1, Interval.valueOf( 0, 1 ).compareTo( -2, 1, 2 ) );
assertEquals( 0, Interval.valueOf( 0, 1 ).compareTo( -1, 1, 2 ) );
assertEquals( 0, Interval.valueOf( 0, 1 ).compareTo( 0, 1, 2 ) );
assertEquals( 0, Interval.valueOf( 0, 1 ).compareTo( 1, 1, 2 ) );
assertEquals( 0, Interval.valueOf( 0, 1 ).compareTo( 2, 1, 2 ) );
assertEquals( 0, Interval.valueOf( 0, 1 ).compareTo( 3, 1, 2 ) );
assertEquals( 1, Interval.valueOf( 0, 1 ).compareTo( 4, 1, 2 ) );
}
private IntSortedSet toSortedSet( Interval interval ) {
if ( interval == EMPTY_INTERVAL ) return IntSortedSets.EMPTY_SET;
IntSortedSet set = new IntRBTreeSet();
for( int i = interval.left; i <= interval.right; i++ ) set.add( i );
return set;
}
public void testSubsets() {
for( int i = 0; i < 10; i++ )
for( int j = i - 1; j < 10; j++ ) {
Interval interval = j < i ? EMPTY_INTERVAL : Interval.valueOf( i, j );
IntSortedSet set = toSortedSet( interval );
assertEquals( set, interval );
assertTrue( Arrays.equals( IntIterators.unwrap( set.iterator() ), IntIterators.unwrap( set.iterator() ) ) );
assertEquals( new IntOpenHashSet( set ), interval );
for( int k = j - 1; k <= i + 1; k++ ) {
assertTrue( Arrays.equals( IntIterators.unwrap( set.iterator( k ) ), IntIterators.unwrap( set.iterator( k ) ) ) );
assertEquals( set.headSet( k ), interval.headSet( k ) );
assertEquals( set.tailSet( k ), interval.tailSet( k ) );
for( int l = k; l <= i + 1; l++ )
assertEquals( set.subSet( k, l ), interval.subSet( k, l ) );
}
}
}
}