package net.time4j.range; import net.time4j.CalendarUnit; import net.time4j.ClockUnit; import net.time4j.PlainDate; import net.time4j.PlainTime; import net.time4j.PlainTimestamp; import net.time4j.format.expert.Iso8601Format; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import java.text.ParseException; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @RunWith(JUnit4.class) public class AlgebraTest { @Test public void precedesIfNoGap() { PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 10); PlainDate startB = PlainDate.of(2014, 5, 11); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.precedes(b), is(false)); assertThat(b.precededBy(a), is(false)); // special check assertThat(b.withOpenStart().precededBy(a), is(true)); assertThat(b.move(-1, CalendarUnit.DAYS).withOpenStart().precededBy(a), is(false)); } @Test public void precedesIfGap() { PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 10); PlainDate startB = PlainDate.of(2014, 5, 12); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.precedes(b), is(true)); assertThat(b.precededBy(a), is(true)); } @Test public void meetsIfNoGap() { PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 10); PlainDate startB = PlainDate.of(2014, 5, 11); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.meets(b), is(true)); assertThat(b.metBy(a), is(true)); } @Test public void meetsIfGap() { PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 10); PlainDate startB = PlainDate.of(2014, 5, 12); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.meets(b), is(false)); assertThat(b.metBy(a), is(false)); } @Test public void meetsOpenInterval() throws ParseException { PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 1, 1); DateInterval a = DateInterval.between(startA, endA); DateInterval b1 = DateInterval.parse( "(2014-01-01/2014-05-31]", Iso8601Format.EXTENDED_CALENDAR_DATE, BracketPolicy.SHOW_ALWAYS); assertThat(a.meets(b1), is(true)); assertThat(b1.metBy(a), is(true)); DateInterval b2 = DateInterval.between( PlainDate.of(2014, 1, 1), PlainDate.of(2014, 5, 31) ).withOpenStart(); assertThat(b1, is(b2)); assertThat(a.meets(b2), is(true)); assertThat(b2.metBy(a), is(true)); } @Test public void precedesOpenInterval() throws ParseException { PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 1, 1); DateInterval a = DateInterval.between(startA, endA); DateInterval b1 = DateInterval.parse( "(2014-01-01/2014-05-31]", Iso8601Format.EXTENDED_CALENDAR_DATE, BracketPolicy.SHOW_ALWAYS); DateInterval b2 = DateInterval.between( PlainDate.of(2014, 1, 1), PlainDate.of(2014, 5, 31) ).withOpenStart(); assertThat(b1, is(b2)); assertThat(a.precedes(b1), is(false)); assertThat(b1.precededBy(a), is(false)); assertThat(a.precedes(b2), is(false)); assertThat(b2.precededBy(a), is(false)); a = a.move(-1, CalendarUnit.DAYS); assertThat(a.precedes(b1), is(true)); assertThat(b1.precededBy(a), is(true)); assertThat(a.precedes(b2), is(true)); assertThat(b2.precededBy(a), is(true)); } @Test public void precedesPast() { PlainDate endA = PlainDate.axis().getMinimum(); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.until(endA); DateInterval b = DateInterval.until(endB); assertThat(a.precedes(b), is(false)); } @Test public void meetsPast() { PlainDate endA = PlainDate.axis().getMinimum(); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.until(endA); DateInterval b = DateInterval.until(endB); assertThat(a.meets(b), is(false)); } @Test public void precedesFuture() { PlainDate startA = PlainDate.of(2014, 5, 17); PlainDate startB = PlainDate.axis().getMaximum(); DateInterval a = DateInterval.since(startA); DateInterval b = DateInterval.since(startB); assertThat(a.precedes(b), is(false)); } @Test public void meetsFuture() { PlainDate startA = PlainDate.of(2014, 5, 17); PlainDate startB = PlainDate.axis().getMaximum(); DateInterval a = DateInterval.since(startA); DateInterval b = DateInterval.since(startB); assertThat(a.meets(b), is(false)); } @Test public void meetsEmpty1() { PlainDate startA = PlainDate.of(2014, 5, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 16); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB).collapse(); assertThat(a.meets(b), is(true)); assertThat(b.metBy(a), is(true)); } @Test public void meetsEmpty2() { PlainDate startA = PlainDate.of(2014, 5, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB).collapse(); assertThat(a.meets(b), is(false)); assertThat(b.metBy(a), is(false)); } @Test public void overlaps1() { // meets PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 10); PlainDate startB = PlainDate.of(2014, 5, 11); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.overlaps(b), is(false)); } @Test public void overlaps2() { PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 11); PlainDate startB = PlainDate.of(2014, 5, 11); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.overlaps(b), is(true)); } @Test public void overlaps3() { // meets PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 11); PlainDate startB = PlainDate.of(2014, 5, 11); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA).withOpenEnd(); DateInterval b = DateInterval.between(startB, endB); assertThat(a.overlaps(b), is(false)); } @Test public void overlaps4() { PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 12); PlainDate startB = PlainDate.of(2014, 5, 11); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.overlaps(b), is(true)); } @Test public void overlaps5() { PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 16); PlainDate startB = PlainDate.of(2014, 5, 11); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.overlaps(b), is(true)); } @Test public void overlaps6() { // finishes PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 17); PlainDate startB = PlainDate.of(2014, 5, 11); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.overlaps(b), is(false)); } @Test public void overlaps7() { // finishes PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 16); PlainDate startB = PlainDate.of(2014, 5, 11); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB).withOpenEnd(); assertThat(a.overlaps(b), is(false)); } @Test public void overlaps8() { // equals PlainDate startA = PlainDate.of(2014, 5, 11); PlainDate endA = PlainDate.of(2014, 5, 17); PlainDate startB = PlainDate.of(2014, 5, 11); PlainDate endB = PlainDate.of(2014, 5, 18); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB).withOpenEnd(); assertThat(a.overlaps(b), is(false)); } @Test public void overlaps9() { // contains PlainDate startA = PlainDate.of(2014, 5, 11); PlainDate endA = PlainDate.of(2014, 5, 18); PlainDate startB = PlainDate.of(2014, 5, 12); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.overlaps(b), is(false)); } @Test public void overlaps10() { // during PlainDate startA = PlainDate.of(2014, 5, 13); PlainDate endA = PlainDate.of(2014, 5, 15); PlainDate startB = PlainDate.of(2014, 5, 12); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.overlaps(b), is(false)); } @Test public void overlaps11() { // starts PlainDate startA = PlainDate.of(2014, 5, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 5, 13); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.overlaps(b), is(false)); } @Test public void overlaps12() { // overlappedBy PlainDate startA = PlainDate.of(2014, 5, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 5, 10); PlainDate endB = PlainDate.of(2014, 5, 13); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.overlaps(b), is(false)); } @Test public void overlapsEmpty1() { PlainDate startA = PlainDate.of(2014, 5, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 15); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB).collapse(); assertThat(a.overlaps(b), is(false)); } @Test public void overlapsEmpty2() { PlainDate startA = PlainDate.of(2014, 5, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 16); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB).collapse(); assertThat(a.overlaps(b), is(false)); } @Test public void overlappedBy() { PlainDate startA = PlainDate.of(2014, 5, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 5, 10); PlainDate endB = PlainDate.of(2014, 5, 13); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(b.overlaps(a), is(true)); assertThat(a.overlappedBy(b), is(true)); } @Test public void finishedByEmpty1() { PlainDate startA = PlainDate.of(2014, 5, 13); PlainDate endA = PlainDate.of(2014, 6, 15); // ende inklusive PlainDate startB = PlainDate.of(2014, 6, 15); // ende exklusive DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB).collapse(); assertThat(a.finishedBy(b), is(false)); assertThat(b.finishedBy(a), is(false)); } @Test public void finishedByEmpty2() { PlainDate startA = PlainDate.of(2014, 5, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 16); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB).collapse(); assertThat(a.finishedBy(b), is(false)); assertThat(b.finishedBy(a), is(false)); } @Test public void finishes1() { PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 17); PlainDate startB = PlainDate.of(2014, 5, 11); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.finishes(b), is(false)); assertThat(a.finishedBy(b), is(true)); } @Test public void finishes2() { PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 18); PlainDate startB = PlainDate.of(2014, 5, 11); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA).withOpenEnd(); DateInterval b = DateInterval.between(startB, endB); assertThat(a.finishes(b), is(false)); assertThat(a.finishedBy(b), is(true)); } @Test public void finishes3() { PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 16); PlainDate startB = PlainDate.of(2014, 5, 11); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB).withOpenEnd(); assertThat(a.finishes(b), is(false)); assertThat(a.finishedBy(b), is(true)); } @Test public void finishes4() { // contains PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 18); PlainDate startB = PlainDate.of(2014, 5, 11); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.finishes(b), is(false)); assertThat(a.finishedBy(b), is(false)); } @Test public void finishes5() { // overlaps PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 16); PlainDate startB = PlainDate.of(2014, 5, 11); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.finishes(b), is(false)); assertThat(a.finishedBy(b), is(false)); } @Test public void finishesTSP1() { PlainTimestamp startA = PlainDate.of(2012, 2, 29).atStartOfDay(); PlainTimestamp endA = PlainDate.of(2014, 5, 17).atStartOfDay(); PlainTimestamp startB = PlainDate.of(2014, 5, 11).atStartOfDay(); PlainTimestamp endB = PlainDate.of(2014, 5, 17).atStartOfDay(); TimestampInterval a = TimestampInterval.between(startA, endA); TimestampInterval b = TimestampInterval.between(startB, endB); assertThat(a.finishes(b), is(false)); assertThat(a.finishedBy(b), is(true)); } @Test public void finishesTSP2() { PlainTimestamp startA = PlainDate.of(2012, 2, 29).atStartOfDay(); PlainTimestamp endA = PlainDate.of(2014, 5, 17).atStartOfDay().minus(1, ClockUnit.NANOS); PlainTimestamp startB = PlainDate.of(2014, 5, 11).atStartOfDay(); PlainTimestamp endB = PlainDate.of(2014, 5, 17).atStartOfDay(); TimestampInterval a = TimestampInterval.between(startA, endA).withClosedEnd(); TimestampInterval b = TimestampInterval.between(startB, endB); assertThat(a.finishes(b), is(false)); assertThat(a.finishedBy(b), is(true)); } @Test public void finishesTSP3() { PlainTimestamp startA = PlainDate.of(2012, 2, 29).atStartOfDay(); PlainTimestamp endA = PlainDate.of(2014, 5, 17).atStartOfDay(); PlainTimestamp startB = PlainDate.of(2014, 5, 11).atStartOfDay(); PlainTimestamp endB = PlainDate.of(2014, 5, 17).atStartOfDay().minus(1, ClockUnit.NANOS); TimestampInterval a = TimestampInterval.between(startA, endA); TimestampInterval b = TimestampInterval.between(startB, endB).withClosedEnd(); assertThat(a.finishes(b), is(false)); assertThat(a.finishedBy(b), is(true)); } @Test public void finishesTSPMax() { PlainTimestamp startA = PlainDate.of(2012, 2, 29).atStartOfDay(); PlainTimestamp endA = PlainTimestamp.axis().getMaximum(); PlainTimestamp startB = PlainDate.of(2014, 5, 11).atStartOfDay(); PlainTimestamp endB = PlainTimestamp.axis().getMaximum(); TimestampInterval a = TimestampInterval.between(startA, endA); TimestampInterval b = TimestampInterval.between(startB, endB); assertThat(a.finishes(b), is(false)); assertThat(b.finishes(a), is(true)); assertThat(a.finishedBy(b), is(true)); assertThat(b.finishedBy(a), is(false)); } @Test public void finishesTSPFuture() { PlainTimestamp startA = PlainDate.of(2012, 2, 29).atStartOfDay(); PlainTimestamp startB = PlainDate.of(2014, 5, 11).atStartOfDay(); TimestampInterval a = TimestampInterval.since(startA); TimestampInterval b = TimestampInterval.since(startB); assertThat(a.finishes(b), is(false)); assertThat(b.finishes(a), is(true)); assertThat(a.finishedBy(b), is(true)); assertThat(b.finishedBy(a), is(false)); } @Test public void overlapsTSP1() { PlainTimestamp startA = PlainDate.of(2012, 2, 29).atStartOfDay(); PlainTimestamp endA = PlainDate.of(2014, 5, 12).atStartOfDay(); PlainTimestamp startB = PlainDate.of(2014, 5, 11).atStartOfDay(); PlainTimestamp endB = PlainDate.of(2014, 5, 17).atStartOfDay(); TimestampInterval a = TimestampInterval.between(startA, endA); TimestampInterval b = TimestampInterval.between(startB, endB); assertThat(a.overlaps(b), is(true)); } @Test public void overlapsTSP2() { PlainTimestamp startA = PlainDate.of(2012, 2, 29).atStartOfDay(); PlainTimestamp endA = PlainDate.of(2014, 5, 12).atStartOfDay(); PlainTimestamp startB = PlainDate.of(2014, 5, 11).atStartOfDay(); PlainTimestamp endB = PlainDate.of(2014, 5, 17).atStartOfDay().minus(1, ClockUnit.NANOS); TimestampInterval a = TimestampInterval.between(startA, endA); TimestampInterval b = TimestampInterval.between(startB, endB).withClosedEnd(); assertThat(a.overlaps(b), is(true)); } @Test public void overlapsTSP3() { PlainTimestamp startA = PlainDate.of(2012, 2, 29).atStartOfDay(); PlainTimestamp endA = PlainDate.of(2014, 5, 12).atStartOfDay().minus(1, ClockUnit.NANOS); PlainTimestamp startB = PlainDate.of(2014, 5, 11).atStartOfDay(); PlainTimestamp endB = PlainDate.of(2014, 5, 17).atStartOfDay(); TimestampInterval a = TimestampInterval.between(startA, endA).withClosedEnd(); TimestampInterval b = TimestampInterval.between(startB, endB); assertThat(a.overlaps(b), is(true)); } @Test public void overlapsTSPMaxFuture() { PlainTimestamp startA = PlainDate.of(2012, 2, 29).atStartOfDay(); PlainTimestamp endA = PlainTimestamp.axis().getMaximum(); PlainTimestamp startB = PlainDate.of(2014, 5, 11).atStartOfDay(); TimestampInterval a = TimestampInterval.between(startA, endA); TimestampInterval b = TimestampInterval.since(startB); assertThat(a.overlaps(b), is(true)); assertThat(b.overlaps(a), is(false)); assertThat(a.overlappedBy(b), is(false)); assertThat(b.overlappedBy(a), is(true)); } @Test public void overlapsTSPFutureFuture() { PlainTimestamp startA = PlainDate.of(2012, 2, 29).atStartOfDay(); PlainTimestamp startB = PlainDate.of(2014, 5, 11).atStartOfDay(); TimestampInterval a = TimestampInterval.since(startA); TimestampInterval b = TimestampInterval.since(startB); assertThat(a.overlaps(b), is(false)); assertThat(a.overlappedBy(b), is(false)); } @Test public void startedByEmpty1() { PlainDate startA = PlainDate.of(2014, 6, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 13); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB).collapse(); assertThat(b.startedBy(a), is(false)); assertThat(a.startedBy(b), is(true)); } @Test public void startedByEmpty2() { PlainDate startA = PlainDate.of(2014, 6, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 14); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB).collapse(); assertThat(b.startedBy(a), is(false)); assertThat(a.startedBy(b), is(false)); } @Test public void starts1() { PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 18); PlainDate startB = PlainDate.of(2012, 2, 29); PlainDate endB = PlainDate.of(2014, 5, 19); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.starts(b), is(true)); assertThat(a.startedBy(b), is(false)); } @Test public void starts2() { PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 18); PlainDate startB = PlainDate.of(2012, 2, 29); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.starts(b), is(false)); assertThat(a.startedBy(b), is(true)); } @Test public void starts3() { // equivalent PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 16); PlainDate startB = PlainDate.of(2012, 2, 29); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB).withOpenEnd(); assertThat(a.starts(b), is(false)); assertThat(a.startedBy(b), is(false)); } @Test public void starts4() { // contains PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 16); PlainDate startB = PlainDate.of(2012, 2, 28); PlainDate endB = PlainDate.of(2014, 5, 17); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.starts(b), is(false)); assertThat(a.startedBy(b), is(false)); } @Test public void starts5() { // overlaps PlainDate startA = PlainDate.of(2012, 2, 29); PlainDate endA = PlainDate.of(2014, 5, 16); PlainDate startB = PlainDate.of(2012, 2, 28); PlainDate endB = PlainDate.of(2014, 5, 14); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.starts(b), is(false)); assertThat(a.startedBy(b), is(false)); } @Test public void startsTSP() { PlainTimestamp startA = PlainDate.of(2012, 2, 29).atStartOfDay(); PlainTimestamp endA = PlainDate.of(2014, 5, 17).atStartOfDay(); PlainTimestamp startB = PlainDate.of(2012, 2, 29).atStartOfDay(); PlainTimestamp endB = PlainDate.of(2014, 5, 18).atStartOfDay(); TimestampInterval a = TimestampInterval.between(startA, endA); TimestampInterval b = TimestampInterval.between(startB, endB); assertThat(a.starts(b), is(true)); assertThat(b.starts(a), is(false)); assertThat(a.startedBy(b), is(false)); assertThat(b.startedBy(a), is(true)); } @Test public void startsTSPMin() { PlainTimestamp startA = PlainTimestamp.axis().getMinimum(); PlainTimestamp endA = PlainDate.of(2012, 2, 29).atStartOfDay(); PlainTimestamp startB = PlainTimestamp.axis().getMinimum(); PlainTimestamp endB = PlainDate.of(2014, 5, 11).atStartOfDay(); TimestampInterval a = TimestampInterval.between(startA, endA); TimestampInterval b = TimestampInterval.between(startB, endB); assertThat(a.starts(b), is(true)); assertThat(b.starts(a), is(false)); assertThat(a.startedBy(b), is(false)); assertThat(b.startedBy(a), is(true)); } @Test public void startsTSPPast() { PlainTimestamp startA = PlainDate.of(2012, 2, 29).atStartOfDay(); PlainTimestamp startB = PlainDate.of(2014, 5, 11).atStartOfDay(); TimestampInterval a = TimestampInterval.until(startA); TimestampInterval b = TimestampInterval.until(startB); assertThat(a.starts(b), is(true)); assertThat(b.starts(a), is(false)); assertThat(a.startedBy(b), is(false)); assertThat(b.startedBy(a), is(true)); } @Test public void enclosesEmpty1() { PlainDate startA = PlainDate.of(2014, 6, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 14); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB).collapse(); assertThat(b.encloses(a), is(false)); assertThat(a.encloses(b), is(true)); } @Test public void enclosesEmpty2() { PlainDate startA = PlainDate.of(2014, 6, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 15); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB).collapse(); assertThat(b.encloses(a), is(false)); assertThat(a.encloses(b), is(true)); } @Test public void enclosesGreater() { PlainDate startA = PlainDate.of(2014, 6, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 10); PlainDate endB = PlainDate.of(2014, 6, 19); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(b.encloses(a), is(true)); assertThat(a.encloses(b), is(false)); assertThat(a.enclosedBy(b), is(true)); assertThat(b.enclosedBy(a), is(false)); } @Test public void enclosesSmaller() { PlainDate startA = PlainDate.of(2014, 6, 1); PlainDate endA = PlainDate.of(2014, 6, 30); PlainDate startB = PlainDate.of(2014, 6, 10); PlainDate endB = PlainDate.of(2014, 6, 19); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(b.encloses(a), is(false)); assertThat(a.encloses(b), is(true)); assertThat(a.enclosedBy(b), is(false)); assertThat(b.enclosedBy(a), is(true)); } @Test public void enclosesSmallerWithSameStart() { PlainDate startA = PlainDate.of(2014, 6, 1); PlainDate endA = PlainDate.of(2014, 6, 30); PlainDate startB = PlainDate.of(2014, 6, 1); PlainDate endB = PlainDate.of(2014, 6, 19); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(b.encloses(a), is(false)); assertThat(a.encloses(b), is(false)); assertThat(a.enclosedBy(b), is(false)); assertThat(b.enclosedBy(a), is(false)); } @Test public void enclosesSmallerWithSameEnd() { PlainDate startA = PlainDate.of(2014, 6, 1); PlainDate endA = PlainDate.of(2014, 6, 30); PlainDate startB = PlainDate.of(2014, 6, 10); PlainDate endB = PlainDate.of(2014, 6, 30); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(b.encloses(a), is(false)); assertThat(a.encloses(b), is(false)); assertThat(a.enclosedBy(b), is(false)); assertThat(b.enclosedBy(a), is(false)); } @Test public void containsSmaller() { PlainDate startA = PlainDate.of(2014, 6, 1); PlainDate endA = PlainDate.of(2014, 6, 30); PlainDate startB = PlainDate.of(2014, 6, 10); PlainDate endB = PlainDate.of(2014, 6, 19); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(b.contains(a), is(false)); assertThat(a.contains(b), is(true)); } @Test public void containsSmallerWithSameStart() { PlainDate startA = PlainDate.of(2014, 6, 1); PlainDate endA = PlainDate.of(2014, 6, 30); PlainDate startB = PlainDate.of(2014, 6, 1); PlainDate endB = PlainDate.of(2014, 6, 19); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(b.contains(a), is(false)); assertThat(a.contains(b), is(true)); } @Test public void containsSmallerWithSameEnd() { PlainDate startA = PlainDate.of(2014, 6, 1); PlainDate endA = PlainDate.of(2014, 6, 30); PlainDate startB = PlainDate.of(2014, 6, 10); PlainDate endB = PlainDate.of(2014, 6, 30); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(b.contains(a), is(false)); assertThat(a.contains(b), is(true)); } @Test public void containsEmpty1() { PlainDate startA = PlainDate.of(2014, 5, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 15); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB).collapse(); assertThat(a.contains(b), is(true)); assertThat(b.contains(a), is(false)); } @Test public void containsEmpty2() { PlainDate startA = PlainDate.of(2014, 5, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 16); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB).collapse(); assertThat(a.contains(b), is(false)); assertThat(b.contains(a), is(false)); } @Test public void equivalentTo1() { PlainDate startA = PlainDate.of(2014, 6, 16); PlainDate endA = PlainDate.of(2014, 6, 20); PlainDate startB = PlainDate.of(2014, 6, 16); PlainDate endB = PlainDate.of(2014, 6, 20); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.equivalentTo(b), is(true)); assertThat(b.equivalentTo(a), is(true)); } @Test public void equivalentTo2() { PlainDate startA = PlainDate.of(2014, 6, 16); PlainDate endA = PlainDate.of(2014, 6, 21); PlainDate startB = PlainDate.of(2014, 6, 16); PlainDate endB = PlainDate.of(2014, 6, 20); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.between(startB, endB); assertThat(a.equivalentTo(b), is(false)); assertThat(b.equivalentTo(a), is(false)); } @Test public void equivalentTo3() { PlainDate startA = PlainDate.of(2014, 6, 16); PlainDate endA = PlainDate.of(2014, 6, 21); PlainDate startB = PlainDate.of(2014, 6, 16); PlainDate endB = PlainDate.of(2014, 6, 20); DateInterval a = DateInterval.between(startA, endA).withOpenEnd(); DateInterval b = DateInterval.between(startB, endB); assertThat(a.equivalentTo(b), is(true)); assertThat(b.equivalentTo(a), is(true)); } @Test public void equivalentTo4() { PlainDate startA = PlainDate.of(2014, 6, 16); PlainDate startB = PlainDate.of(2014, 6, 16); DateInterval a = DateInterval.since(startA); DateInterval b = DateInterval.since(startB); assertThat(a.equivalentTo(b), is(true)); assertThat(b.equivalentTo(a), is(true)); } @Test public void emptyEquivalentToEmpty() { PlainDate startA = PlainDate.of(2014, 6, 13); PlainDate startB = PlainDate.of(2014, 6, 13); DateInterval a = DateInterval.since(startA).collapse(); DateInterval b = DateInterval.since(startB).collapse(); assertThat(a.equivalentTo(b), is(true)); assertThat(a.meets(b), is(false)); assertThat(a.metBy(b), is(false)); } @Test public void emptyTest() { PlainDate startA = PlainDate.of(2014, 6, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 16); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB).collapse(); assertThat(a.contains(b), is(false)); assertThat(a.meets(b), is(true)); assertThat(a.precedes(b), is(false)); assertThat(a.overlaps(b), is(false)); assertThat(a.starts(b), is(false)); assertThat(a.finishes(b), is(false)); assertThat(a.encloses(b), is(false)); assertThat(a.metBy(b), is(false)); assertThat(a.precededBy(b), is(false)); assertThat(a.overlappedBy(b), is(false)); assertThat(a.finishedBy(b), is(false)); assertThat(a.startedBy(b), is(false)); assertThat(a.enclosedBy(b), is(false)); assertThat(a.equivalentTo(b), is(false)); } @Test public void intersectsIfEmpty() { PlainDate startA = PlainDate.of(2014, 6, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 14); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB).collapse(); assertThat(a.intersects(b), is(false)); assertThat(b.intersects(a), is(false)); assertThat(a.findIntersection(b).isPresent(), is(false)); assertThat(b.findIntersection(a).isPresent(), is(false)); } @Test public void intersectsIfSameStart() { PlainDate startA = PlainDate.of(2014, 6, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 13); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB); assertThat(a.intersects(b), is(true)); assertThat(b.intersects(a), is(true)); assertThat(a.findIntersection(b).get(), is(a)); assertThat(b.findIntersection(a).get(), is(a)); } @Test public void intersectsIfOverlap() { PlainDate startA = PlainDate.of(2014, 6, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 14); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB); DateInterval c = DateInterval.between(startB, endA); assertThat(a.intersects(b), is(true)); assertThat(b.intersects(a), is(true)); assertThat(a.findIntersection(b).get(), is(c)); assertThat(b.findIntersection(a).get(), is(c)); } @Test public void intersectsIfSameEnd() { PlainDate startA = PlainDate.of(2014, 6, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 15); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB); DateInterval c = DateInterval.atomic(startB); assertThat(a.intersects(b), is(true)); assertThat(b.intersects(a), is(true)); assertThat(a.findIntersection(b).get(), is(c)); assertThat(b.findIntersection(a).get(), is(c)); } @Test public void intersectsIfBefore() { PlainDate startA = PlainDate.of(2014, 6, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 16); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB); assertThat(a.intersects(b), is(false)); assertThat(b.intersects(a), is(false)); assertThat(a.findIntersection(b).isPresent(), is(false)); assertThat(b.findIntersection(a).isPresent(), is(false)); } @Test public void intersectsWhenOpenAndEmpty() { PlainTime startA = PlainTime.of(6, 5); PlainTime endA = PlainTime.of(12, 15); PlainTime startB = PlainTime.of(12, 15); PlainTime endB = PlainTime.of(17, 30); ClockInterval a = ClockInterval.between(startA, endA); ClockInterval b = ClockInterval.between(startB, endB); assertThat(a.intersects(b), is(false)); assertThat(b.intersects(a), is(false)); assertThat(a.findIntersection(b).isPresent(), is(false)); assertThat(b.findIntersection(a).isPresent(), is(false)); } @Test public void intersectsWhenOpenAndNotEmpty() { PlainTime startA = PlainTime.of(6, 5); PlainTime endA = PlainTime.of(12, 15).plus(1, ClockUnit.NANOS); PlainTime startB = PlainTime.of(12, 15); PlainTime endB = PlainTime.of(17, 30); ClockInterval a = ClockInterval.between(startA, endA); ClockInterval b = ClockInterval.between(startB, endB); ClockInterval c = ClockInterval.between(startB, endA); assertThat(a.intersects(b), is(true)); assertThat(b.intersects(a), is(true)); assertThat(a.findIntersection(b).get(), is(c)); assertThat(b.findIntersection(a).get(), is(c)); } @Test public void abuts() { PlainDate startA = PlainDate.of(2014, 6, 13); PlainDate endA = PlainDate.of(2014, 6, 15); PlainDate startB = PlainDate.of(2014, 6, 16); DateInterval a = DateInterval.between(startA, endA); DateInterval b = DateInterval.since(startB); b = b.move(1, CalendarUnit.DAYS); assertThat(a.abuts(b), is(false)); assertThat(b.abuts(a), is(false)); b = b.move(-2, CalendarUnit.DAYS); assertThat(a.abuts(b), is(false)); assertThat(b.abuts(a), is(false)); b = b.move(1, CalendarUnit.DAYS); assertThat(a.abuts(b), is(true)); assertThat(b.abuts(a), is(true)); b = b.collapse(); assertThat(a.abuts(b), is(false)); assertThat(b.abuts(a), is(false)); } }