package edu.stanford.nlp.util;
import junit.framework.TestCase;
/**
* Test for intervals
*
* @author Angel Chang
*/
public class IntervalTest extends TestCase {
private String toHexString(int n)
{
return String.format("%08x", n);
}
public void testIntervalOverlaps() throws Exception
{
Interval<Integer> i1_10 = Interval.toInterval(1,10);
Interval<Integer> i2_9 = Interval.toInterval(2,9);
Interval<Integer> i5_10 = Interval.toInterval(5,10);
Interval<Integer> i1_5 = Interval.toInterval(1,5);
Interval<Integer> i1_15 = Interval.toInterval(1,15);
Interval<Integer> i5_20 = Interval.toInterval(5,20);
Interval<Integer> i10_20 = Interval.toInterval(10,20);
Interval<Integer> i15_20 = Interval.toInterval(15,20);
Interval<Integer> i1_10b = Interval.toInterval(1,10);
assertTrue(i1_10.overlaps(i2_9));
assertTrue(i1_10.overlaps(i5_10));
assertTrue(i1_10.overlaps(i1_5));
assertTrue(i1_10.overlaps(i1_15));
assertTrue(i1_10.overlaps(i5_20));
assertTrue(i1_10.overlaps(i10_20));
assertFalse(i1_10.overlaps(i15_20));
assertTrue(i1_10.overlaps(i1_10b));
assertTrue(i2_9.overlaps(i1_10));
assertTrue(i5_10.overlaps(i1_10));
assertTrue(i1_5.overlaps(i1_10));
assertTrue(i1_15.overlaps(i1_10));
assertTrue(i5_20.overlaps(i1_10));
assertTrue(i10_20.overlaps(i1_10));
assertFalse(i15_20.overlaps(i1_10));
assertTrue(i1_10b.overlaps(i1_10));
int openFlags = Interval.INTERVAL_OPEN_BEGIN | Interval.INTERVAL_OPEN_END;
Interval<Integer> i1_10_open = Interval.toInterval(1,10, openFlags);
Interval<Integer> i2_9_open = Interval.toInterval(2,9, openFlags);
Interval<Integer> i5_10_open = Interval.toInterval(5,10, openFlags);
Interval<Integer> i1_5_open = Interval.toInterval(1,5, openFlags);
Interval<Integer> i1_15_open = Interval.toInterval(1,15, openFlags);
Interval<Integer> i5_20_open = Interval.toInterval(5,20, openFlags);
Interval<Integer> i10_20_open = Interval.toInterval(10,20, openFlags);
Interval<Integer> i15_20_open = Interval.toInterval(15,20, openFlags);
Interval<Integer> i1_10b_open = Interval.toInterval(1,10, openFlags);
assertTrue(i1_10_open.overlaps(i2_9_open));
assertTrue(i1_10_open.overlaps(i5_10_open));
assertTrue(i1_10_open.overlaps(i1_5_open));
assertTrue(i1_10_open.overlaps(i1_15_open));
assertTrue(i1_10_open.overlaps(i5_20_open));
assertFalse(i1_10_open.overlaps(i10_20_open));
assertFalse(i1_10_open.overlaps(i15_20_open));
assertTrue(i1_10_open.overlaps(i1_10b_open));
assertTrue(i2_9_open.overlaps(i1_10_open));
assertTrue(i5_10_open.overlaps(i1_10_open));
assertTrue(i1_5_open.overlaps(i1_10_open));
assertTrue(i1_15_open.overlaps(i1_10_open));
assertTrue(i5_20_open.overlaps(i1_10_open));
assertFalse(i10_20_open.overlaps(i1_10_open));
assertFalse(i15_20_open.overlaps(i1_10_open));
assertTrue(i1_10b_open.overlaps(i1_10_open));
}
public void testIntervalContains() throws Exception
{
Interval<Integer> i1_10 = Interval.toInterval(1,10);
Interval<Integer> i2_9 = Interval.toInterval(2,9);
Interval<Integer> i5_10 = Interval.toInterval(5,10);
Interval<Integer> i1_5 = Interval.toInterval(1,5);
Interval<Integer> i1_15 = Interval.toInterval(1,15);
Interval<Integer> i5_20 = Interval.toInterval(5,20);
Interval<Integer> i10_20 = Interval.toInterval(10,20);
Interval<Integer> i15_20 = Interval.toInterval(15,20);
Interval<Integer> i1_10b = Interval.toInterval(1,10);
assertTrue(i1_10.contains(i2_9));
assertTrue(i1_10.contains(i5_10));
assertTrue(i1_10.contains(i1_5));
assertFalse(i1_10.contains(i1_15));
assertFalse(i1_10.contains(i5_20));
assertFalse(i1_10.contains(i10_20));
assertFalse(i1_10.contains(i15_20));
assertTrue(i1_10.contains(i1_10b));
assertFalse(i2_9.contains(i1_10));
assertFalse(i5_10.contains(i1_10));
assertFalse(i1_5.contains(i1_10));
assertTrue(i1_15.contains(i1_10));
assertFalse(i5_20.contains(i1_10));
assertFalse(i10_20.contains(i1_10));
assertFalse(i15_20.contains(i1_10));
assertTrue(i1_10b.contains(i1_10));
int openFlags = Interval.INTERVAL_OPEN_BEGIN | Interval.INTERVAL_OPEN_END;
Interval<Integer> i1_10_open = Interval.toInterval(1,10, openFlags);
Interval<Integer> i2_9_open = Interval.toInterval(2,9, openFlags);
Interval<Integer> i5_10_open = Interval.toInterval(5,10, openFlags);
Interval<Integer> i1_5_open = Interval.toInterval(1,5, openFlags);
Interval<Integer> i1_15_open = Interval.toInterval(1,15, openFlags);
Interval<Integer> i5_20_open = Interval.toInterval(5,20, openFlags);
Interval<Integer> i10_20_open = Interval.toInterval(10,20, openFlags);
Interval<Integer> i15_20_open = Interval.toInterval(15,20, openFlags);
Interval<Integer> i1_10b_open = Interval.toInterval(1,10, openFlags);
assertTrue(i1_10_open.contains(i2_9_open));
assertTrue(i1_10_open.contains(i5_10_open));
assertTrue(i1_10_open.contains(i1_5_open));
assertFalse(i1_10_open.contains(i1_15_open));
assertFalse(i1_10_open.contains(i5_20_open));
assertFalse(i1_10_open.contains(i10_20_open));
assertFalse(i1_10_open.contains(i15_20_open));
assertTrue(i1_10_open.contains(i1_10b_open));
assertFalse(i2_9_open.contains(i1_10_open));
assertFalse(i5_10_open.contains(i1_10_open));
assertFalse(i1_5_open.contains(i1_10_open));
assertTrue(i1_15_open.contains(i1_10_open));
assertFalse(i5_20_open.contains(i1_10_open));
assertFalse(i10_20_open.contains(i1_10_open));
assertFalse(i15_20_open.contains(i1_10_open));
assertTrue(i1_10b_open.contains(i1_10_open));
int openClosedFlags = Interval.INTERVAL_OPEN_BEGIN;
Interval<Integer> i1_10_openClosed = Interval.toInterval(1,10, openClosedFlags);
Interval<Integer> i2_9_openClosed = Interval.toInterval(2,9, openClosedFlags);
Interval<Integer> i5_10_openClosed = Interval.toInterval(5,10, openClosedFlags);
Interval<Integer> i1_5_openClosed = Interval.toInterval(1,5, openClosedFlags);
// Interval<Integer> i1_15_openClosed = Interval.toInterval(1,15, openClosedFlags);
// Interval<Integer> i5_20_openClosed = Interval.toInterval(5,20, openClosedFlags);
// Interval<Integer> i10_20_openClosed = Interval.toInterval(10,20, openClosedFlags);
// Interval<Integer> i15_20_openClosed = Interval.toInterval(15,20, openClosedFlags);
Interval<Integer> i1_10b_openClosed = Interval.toInterval(1,10, openClosedFlags);
int closedOpenFlags = Interval.INTERVAL_OPEN_END;
Interval<Integer> i1_10_closedOpen = Interval.toInterval(1,10, closedOpenFlags);
Interval<Integer> i2_9_closedOpen = Interval.toInterval(2,9, closedOpenFlags);
Interval<Integer> i5_10_closedOpen = Interval.toInterval(5,10, closedOpenFlags);
Interval<Integer> i1_5_closedOpen = Interval.toInterval(1,5, closedOpenFlags);
// Interval<Integer> i1_15_closedOpen = Interval.toInterval(1,15, closedOpenFlags);
// Interval<Integer> i5_20_closedOpen = Interval.toInterval(5,20, closedOpenFlags);
// Interval<Integer> i10_20_closedOpen = Interval.toInterval(10,20, closedOpenFlags);
// Interval<Integer> i15_20_closedOpen = Interval.toInterval(15,20, closedOpenFlags);
Interval<Integer> i1_10b_closedOpen = Interval.toInterval(1,10, closedOpenFlags);
assertTrue(i1_10_closedOpen.contains(i2_9_openClosed));
assertTrue(i1_10.contains(i2_9_openClosed));
assertTrue(i1_10_openClosed.contains(i2_9_openClosed));
assertTrue(i1_10_closedOpen.contains(i2_9_closedOpen));
assertTrue(i1_10.contains(i2_9_closedOpen));
assertTrue(i1_10_openClosed.contains(i2_9_closedOpen));
assertFalse(i1_10_closedOpen.contains(i5_10_openClosed));
assertTrue(i1_10.contains(i5_10_openClosed));
assertTrue(i1_10_openClosed.contains(i5_10_openClosed));
assertTrue(i1_10_closedOpen.contains(i5_10_closedOpen));
assertTrue(i1_10.contains(i5_10_closedOpen));
assertTrue(i1_10_openClosed.contains(i5_10_closedOpen));
assertTrue(i1_10_closedOpen.contains(i1_5_openClosed));
assertTrue(i1_10.contains(i1_5_openClosed));
assertTrue(i1_10_openClosed.contains(i1_5_openClosed));
assertTrue(i1_10_closedOpen.contains(i1_5_closedOpen));
assertTrue(i1_10.contains(i1_5_closedOpen));
assertFalse(i1_10_openClosed.contains(i1_5_closedOpen));
assertTrue(i1_10_openClosed.contains(i1_10b_openClosed));
assertFalse(i1_10_openClosed.contains(i1_10b_closedOpen));
assertFalse(i1_10_closedOpen.contains(i1_10b_openClosed));
assertTrue(i1_10_closedOpen.contains(i1_10b_closedOpen));
}
public void testIntervalRelations() throws Exception
{
Interval<Integer> i1_10 = Interval.toInterval(1,10);
Interval<Integer> i2_9 = Interval.toInterval(2,9);
Interval<Integer> i5_10 = Interval.toInterval(5,10);
Interval<Integer> i1_5 = Interval.toInterval(1,5);
Interval<Integer> i1_15 = Interval.toInterval(1,15);
Interval<Integer> i5_20 = Interval.toInterval(5,20);
Interval<Integer> i10_20 = Interval.toInterval(10,20);
Interval<Integer> i15_20 = Interval.toInterval(15,20);
Interval<Integer> i1_10b = Interval.toInterval(1,10);
Interval.RelType rel = i1_10.getRelation(null);
assertEquals(Interval.RelType.NONE, rel);
int flags = i1_10.getRelationFlags(null);
assertEquals(0, flags);
rel = i1_10.getRelation(i2_9);
assertEquals(Interval.RelType.CONTAIN, rel);
flags = i1_10.getRelationFlags(i2_9);
assertEquals(toHexString(Interval.REL_FLAGS_SS_BEFORE | Interval.REL_FLAGS_SE_BEFORE |
Interval.REL_FLAGS_ES_AFTER | Interval.REL_FLAGS_EE_AFTER |
Interval.REL_FLAGS_INTERVAL_CONTAIN | Interval.REL_FLAGS_INTERVAL_OVERLAP ),
toHexString(flags));
rel = i1_10.getRelation(i1_5);
assertEquals(Interval.RelType.CONTAIN, rel);
flags = i1_10.getRelationFlags(i1_5);
assertEquals(toHexString(Interval.REL_FLAGS_SS_SAME | Interval.REL_FLAGS_SE_BEFORE |
Interval.REL_FLAGS_ES_AFTER | Interval.REL_FLAGS_EE_AFTER |
Interval.REL_FLAGS_INTERVAL_CONTAIN | Interval.REL_FLAGS_INTERVAL_OVERLAP ),
toHexString(flags));
rel = i1_10.getRelation(i1_15);
assertEquals(Interval.RelType.INSIDE, rel);
flags = i1_10.getRelationFlags(i1_15);
assertEquals(toHexString(Interval.REL_FLAGS_SS_SAME | Interval.REL_FLAGS_SE_BEFORE |
Interval.REL_FLAGS_ES_AFTER | Interval.REL_FLAGS_EE_BEFORE |
Interval.REL_FLAGS_INTERVAL_INSIDE | Interval.REL_FLAGS_INTERVAL_OVERLAP ),
toHexString(flags));
rel = i1_10.getRelation(i5_10);
assertEquals(Interval.RelType.CONTAIN, rel);
flags = i1_10.getRelationFlags(i5_10);
assertEquals(toHexString(Interval.REL_FLAGS_SS_BEFORE | Interval.REL_FLAGS_SE_BEFORE |
Interval.REL_FLAGS_ES_AFTER | Interval.REL_FLAGS_EE_SAME |
Interval.REL_FLAGS_INTERVAL_CONTAIN | Interval.REL_FLAGS_INTERVAL_OVERLAP ),
toHexString(flags));
rel = i1_10.getRelation(i5_20);
assertEquals(Interval.RelType.OVERLAP, rel);
flags = i1_10.getRelationFlags(i5_20);
assertEquals(toHexString(Interval.REL_FLAGS_SS_BEFORE | Interval.REL_FLAGS_SE_BEFORE |
Interval.REL_FLAGS_ES_AFTER | Interval.REL_FLAGS_EE_BEFORE |
Interval.REL_FLAGS_INTERVAL_OVERLAP ),
toHexString(flags));
rel = i1_10.getRelation(i10_20);
assertEquals(Interval.RelType.END_MEET_BEGIN, rel);
flags = i1_10.getRelationFlags(i10_20);
assertEquals(toHexString(Interval.REL_FLAGS_SS_BEFORE | Interval.REL_FLAGS_SE_BEFORE |
Interval.REL_FLAGS_ES_SAME | Interval.REL_FLAGS_EE_BEFORE |
Interval.REL_FLAGS_INTERVAL_OVERLAP ),
toHexString(flags));
rel = i1_10.getRelation(i15_20);
assertEquals(Interval.RelType.BEFORE, rel);
flags = i1_10.getRelationFlags(i15_20);
assertEquals(toHexString(Interval.REL_FLAGS_SS_BEFORE | Interval.REL_FLAGS_SE_BEFORE |
Interval.REL_FLAGS_ES_BEFORE | Interval.REL_FLAGS_EE_BEFORE |
Interval.REL_FLAGS_INTERVAL_BEFORE ),
toHexString(flags));
rel = i1_10.getRelation(i1_10b);
assertEquals(Interval.RelType.EQUAL, rel);
flags = i1_10.getRelationFlags(i1_10b);
assertEquals(toHexString(Interval.REL_FLAGS_SS_SAME | Interval.REL_FLAGS_SE_BEFORE |
Interval.REL_FLAGS_ES_AFTER | Interval.REL_FLAGS_EE_SAME |
Interval.REL_FLAGS_INTERVAL_SAME | Interval.REL_FLAGS_INTERVAL_OVERLAP |
Interval.REL_FLAGS_INTERVAL_CONTAIN | Interval.REL_FLAGS_INTERVAL_INSIDE ),
toHexString(flags));
///////////////////////////////////////////////////
rel = i2_9.getRelation(i1_10);
assertEquals(Interval.RelType.INSIDE, rel);
flags = i2_9.getRelationFlags(i1_10);
assertEquals(toHexString(Interval.REL_FLAGS_SS_AFTER | Interval.REL_FLAGS_SE_BEFORE |
Interval.REL_FLAGS_ES_AFTER | Interval.REL_FLAGS_EE_BEFORE |
Interval.REL_FLAGS_INTERVAL_INSIDE | Interval.REL_FLAGS_INTERVAL_OVERLAP ),
toHexString(flags));
rel = i1_5.getRelation(i1_10);
assertEquals(Interval.RelType.INSIDE, rel);
flags = i1_5.getRelationFlags(i1_10);
assertEquals(toHexString(Interval.REL_FLAGS_SS_SAME | Interval.REL_FLAGS_SE_BEFORE |
Interval.REL_FLAGS_ES_AFTER | Interval.REL_FLAGS_EE_BEFORE |
Interval.REL_FLAGS_INTERVAL_INSIDE | Interval.REL_FLAGS_INTERVAL_OVERLAP ),
toHexString(flags));
rel = i1_15.getRelation(i1_10);
assertEquals(Interval.RelType.CONTAIN, rel);
flags = i1_15.getRelationFlags(i1_10);
assertEquals(toHexString(Interval.REL_FLAGS_SS_SAME | Interval.REL_FLAGS_SE_BEFORE |
Interval.REL_FLAGS_ES_AFTER | Interval.REL_FLAGS_EE_AFTER |
Interval.REL_FLAGS_INTERVAL_CONTAIN | Interval.REL_FLAGS_INTERVAL_OVERLAP ),
toHexString(flags));
rel = i5_10.getRelation(i1_10);
assertEquals(Interval.RelType.INSIDE, rel);
flags = i5_10.getRelationFlags(i1_10);
assertEquals(toHexString(Interval.REL_FLAGS_SS_AFTER | Interval.REL_FLAGS_SE_BEFORE |
Interval.REL_FLAGS_ES_AFTER | Interval.REL_FLAGS_EE_SAME |
Interval.REL_FLAGS_INTERVAL_INSIDE | Interval.REL_FLAGS_INTERVAL_OVERLAP ),
toHexString(flags));
rel = i5_20.getRelation(i1_10);
assertEquals(Interval.RelType.OVERLAP, rel);
flags = i5_20.getRelationFlags(i1_10);
assertEquals(toHexString(Interval.REL_FLAGS_SS_AFTER | Interval.REL_FLAGS_SE_BEFORE |
Interval.REL_FLAGS_ES_AFTER | Interval.REL_FLAGS_EE_AFTER |
Interval.REL_FLAGS_INTERVAL_OVERLAP ),
toHexString(flags));
rel = i10_20.getRelation(i1_10);
assertEquals(Interval.RelType.BEGIN_MEET_END, rel);
flags = i10_20.getRelationFlags(i1_10);
assertEquals(toHexString(Interval.REL_FLAGS_SS_AFTER | Interval.REL_FLAGS_SE_SAME |
Interval.REL_FLAGS_ES_AFTER | Interval.REL_FLAGS_EE_AFTER |
Interval.REL_FLAGS_INTERVAL_OVERLAP ),
toHexString(flags));
rel = i15_20.getRelation(i1_10);
assertEquals(Interval.RelType.AFTER, rel);
flags = i15_20.getRelationFlags(i1_10);
assertEquals(toHexString(Interval.REL_FLAGS_SS_AFTER | Interval.REL_FLAGS_SE_AFTER |
Interval.REL_FLAGS_ES_AFTER | Interval.REL_FLAGS_EE_AFTER |
Interval.REL_FLAGS_INTERVAL_AFTER ),
toHexString(flags));
rel = i1_10b.getRelation(i1_10);
assertEquals(Interval.RelType.EQUAL, rel);
flags = i1_10b.getRelationFlags(i1_10);
assertEquals(toHexString(Interval.REL_FLAGS_SS_SAME | Interval.REL_FLAGS_SE_BEFORE |
Interval.REL_FLAGS_ES_AFTER | Interval.REL_FLAGS_EE_SAME |
Interval.REL_FLAGS_INTERVAL_SAME | Interval.REL_FLAGS_INTERVAL_OVERLAP |
Interval.REL_FLAGS_INTERVAL_CONTAIN | Interval.REL_FLAGS_INTERVAL_INSIDE ),
toHexString(flags));
}
}