package net.time4j.range; import net.time4j.Moment; import net.time4j.PlainTimestamp; import java.time.Instant; import java.util.concurrent.TimeUnit; import net.time4j.SI; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; @RunWith(JUnit4.class) public class BasicMomentRangeTest { @Test public void containsTemporalInside() { Moment start = PlainTimestamp.of(2014, 2, 27, 0, 0).atUTC(); Moment end = PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC(); assertThat( MomentInterval .between(start, end) .contains(PlainTimestamp.of(2014, 3, 1, 14, 45).atUTC()), is(true)); } @Test public void containsTemporalLeftEdgeClosed() { Moment start = PlainTimestamp.of(2014, 2, 27, 0, 0).atUTC(); Moment end = PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC(); assertThat( MomentInterval .between(start, end) .contains(start), is(true)); } @Test public void containsTemporalRightEdgeClosed() { Moment start = PlainTimestamp.of(2014, 2, 27, 0, 0).atUTC(); Moment end = PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC(); assertThat( MomentInterval.between(start, end).withClosedEnd().contains(end), is(true)); } @Test public void containsTemporalRightEdgeOpen() { Moment start = PlainTimestamp.of(2014, 2, 27, 0, 0).atUTC(); Moment end = PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC(); assertThat( MomentInterval .between(start, end) .contains(end), is(false)); } @Test public void containsTemporalOutside() { Moment start = PlainTimestamp.of(2014, 2, 27, 0, 0).atUTC(); Moment end = PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC(); assertThat( MomentInterval .between(start, end) .contains(PlainTimestamp.of(2014, 5, 14, 0, 0, 1).atUTC()), is(false)); } @Test public void containsTemporalInfinitePastOutside() { assertThat( MomentInterval .until(PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC()) .contains(PlainTimestamp.of(2015, 3, 1, 0, 0).atUTC()), is(false)); } @Test public void containsTemporalInfinitePastInside() { assertThat( MomentInterval .until(PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC()) .contains(Moment.axis().getMinimum()), is(true)); } @Test public void containsTemporalInfiniteFutureOutside() { assertThat( MomentInterval .since(PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC()) .contains(PlainTimestamp.of(2012, 3, 1, 0, 0).atUTC()), is(false)); } @Test public void containsTemporalInfiniteFutureInside() { assertThat( MomentInterval .since(PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC()) .contains(Moment.axis().getMaximum()), is(true)); } @Test public void isEmptyInfinitePast() { assertThat( MomentInterval .until(PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC()) .isEmpty(), is(false)); } @Test public void isEmptyInfiniteFuture() { assertThat( MomentInterval .since(PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC()) .isEmpty(), is(false)); } @Test public void isEmptyAtomicClosed() { Moment tsp = PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC(); assertThat( MomentInterval.between(tsp, tsp).withClosedEnd().isEmpty(), is(false)); } @Test public void isEmptyAtomicOpen() { Moment tsp = PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC(); assertThat( MomentInterval.between(tsp, tsp).isEmpty(), is(true)); } @Test public void isFiniteInfinitePast() { assertThat( MomentInterval .until(PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC()) .isFinite(), is(false)); } @Test public void isFiniteInfiniteFuture() { assertThat( MomentInterval .since(PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC()) .isFinite(), is(false)); } @Test public void isFiniteEmpty() { Moment tsp = PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC(); assertThat( MomentInterval.between(tsp, tsp).isFinite(), // empty is(true)); } @Test public void isFinite() { Moment start = PlainTimestamp.of(2014, 2, 27, 0, 0).atUTC(); Moment end = PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC(); assertThat( MomentInterval.between(start, end).isFinite(), is(true)); } @Test public void getStart() { Moment start = PlainTimestamp.of(2014, 2, 27, 0, 0).atUTC(); Moment end = PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC(); assertThat( MomentInterval.between(start, end).getStart(), is(Boundary.of(IntervalEdge.CLOSED, start))); } @Test public void getEnd() { Moment start = PlainTimestamp.of(2014, 2, 27, 0, 0).atUTC(); Moment end = PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC(); assertThat( MomentInterval.between(start, end).getEnd(), is(Boundary.of(IntervalEdge.OPEN, end))); } @Test public void getStartAsInstant() { Instant start = Instant.parse("2014-02-27T10:03:15Z"); assertThat( MomentInterval.since(start).getStartAsInstant(), is(start)); assertThat( MomentInterval.since(start).getEndAsInstant(), nullValue()); } @Test public void getEndAsInstant() { Instant end = Instant.parse("2014-05-14T17:45:30Z"); assertThat( MomentInterval.until(end).getEndAsInstant(), is(end)); assertThat( MomentInterval.until(end).getStartAsInstant(), nullValue()); } @Test public void testEquals() { Moment start1 = PlainTimestamp.of(2014, 2, 27, 0, 0).atUTC(); Moment end1 = PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC(); Moment start2 = start1; Moment end2 = Moment.axis().stepBackwards(end1); assertThat( MomentInterval.between(start1, end1) .equals( MomentInterval.between(start2, end2)), is(false)); assertThat( MomentInterval.between(start1, end1) .equals(MomentInterval.between(start2, end2).withClosedEnd()), is(false)); assertThat( MomentInterval.between(start1, end1) .equals(MomentInterval.between(start1, end1)), is(true)); } @Test public void testHashCode() { Moment start1 = PlainTimestamp.of(2014, 2, 27, 0, 0).atUTC(); Moment end1 = PlainTimestamp.of(2014, 5, 14, 0, 0).atUTC(); Moment start2 = start1; Moment end2 = Moment.axis().stepBackwards(end1); assertThat( MomentInterval.between(start1, end1).hashCode(), not(MomentInterval.between(start2, end2).hashCode())); assertThat( MomentInterval.between(start1, end1).hashCode(), not( MomentInterval.between(start2, end2) .withClosedEnd().hashCode())); assertThat( MomentInterval.between(start1, end1).hashCode(), is(MomentInterval.between(start1, end1).hashCode())); } @Test public void testToStringInfinitePast() { assertThat( MomentInterval .until(PlainTimestamp.of(2014, 5, 14, 14, 45).atUTC()) .toString(), is("(-∞/2014-05-14T14:45:00Z)")); } @Test public void testToStringInfiniteFuture() { assertThat( MomentInterval .since(PlainTimestamp.of(2014, 5, 14, 14, 45).atUTC()) .toString(), is("[2014-05-14T14:45:00Z/+∞)")); } @Test public void testToStringFiniteClosed() { Moment start = PlainTimestamp.of(2014, 2, 27, 14, 45).atUTC(); Moment end = PlainTimestamp.of(2014, 5, 14, 9, 30).atUTC(); assertThat( MomentInterval.between(start, end).withClosedEnd().toString(), is("[2014-02-27T14:45:00Z/2014-05-14T09:30:00Z]")); } @Test public void testToStringFiniteHalfOpen() { Moment start = PlainTimestamp.of(2014, 2, 27, 14, 45).atUTC(); Moment end = PlainTimestamp.of(2014, 5, 14, 9, 30).atUTC(); assertThat( MomentInterval .between(start, end) .toString(), is("[2014-02-27T14:45:00Z/2014-05-14T09:30:00Z)")); } @Test public void move() { Moment start1 = PlainTimestamp.of(2014, 5, 1, 23, 0).atUTC(); Moment end1 = PlainTimestamp.of(2014, 5, 2, 16, 0).atUTC(); MomentInterval interval = MomentInterval.between(start1, end1); Moment start2 = PlainTimestamp.of(2014, 5, 2, 11, 0).atUTC(); Moment end2 = PlainTimestamp.of(2014, 5, 3, 4, 0).atUTC(); MomentInterval expected = MomentInterval.between(start2, end2); assertThat( interval.move(12, TimeUnit.HOURS), is(expected)); assertThat( interval.move(12 * 3600, SI.SECONDS), is(expected)); } }