package net.time4j.range; import net.time4j.CalendarUnit; import net.time4j.PlainDate; 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.nullValue; import static org.junit.Assert.assertThat; @RunWith(JUnit4.class) public class BoundaryTest { @Test public void getTemporalInfinitePast() { assertThat( Boundary.infinitePast().getTemporal(), nullValue()); } @Test public void getTemporalInfiniteFuture() { assertThat( Boundary.infiniteFuture().getTemporal(), nullValue()); } @Test public void getTemporalOpen() { PlainDate date = PlainDate.of(2014, 5, 21); assertThat( Boundary.of(IntervalEdge.OPEN, date).getTemporal(), is(date)); } @Test public void getTemporalClosed() { PlainDate date = PlainDate.of(2014, 5, 21); assertThat( Boundary.of(IntervalEdge.CLOSED, date).getTemporal(), is(date)); } @Test public void IsOpen() { PlainDate date = PlainDate.of(2014, 5, 21); assertThat( Boundary.of(IntervalEdge.CLOSED, date).isOpen(), is(false)); assertThat( Boundary.of(IntervalEdge.OPEN, date).isOpen(), is(true)); assertThat( Boundary.infinitePast().isOpen(), is(true)); assertThat( Boundary.infiniteFuture().isOpen(), is(true)); } @Test public void IsClosed() { PlainDate date = PlainDate.of(2014, 5, 21); assertThat( Boundary.of(IntervalEdge.CLOSED, date).isClosed(), is(true)); assertThat( Boundary.of(IntervalEdge.OPEN, date).isClosed(), is(false)); assertThat( Boundary.infinitePast().isClosed(), is(false)); assertThat( Boundary.infiniteFuture().isClosed(), is(false)); } @Test public void IsInfinite() { PlainDate date = PlainDate.of(2014, 5, 21); assertThat( Boundary.of(IntervalEdge.CLOSED, date).isInfinite(), is(false)); assertThat( Boundary.of(IntervalEdge.OPEN, date).isInfinite(), is(false)); assertThat( Boundary.infinitePast().isInfinite(), is(true)); assertThat( Boundary.infiniteFuture().isInfinite(), is(true)); } @Test public void testEqualsInfinite() { PlainDate date = PlainDate.of(2014, 5, 21); Boundary<PlainDate> b1 = Boundary.infinitePast(); Boundary<PlainDate> b2 = Boundary.of(IntervalEdge.CLOSED, date); Boundary<PlainDate> b3 = Boundary.infiniteFuture(); assertThat(b1.equals(b2), is(false)); assertThat(b1.equals(b3), is(false)); assertThat(b2.equals(b3), is(false)); assertThat(b1.equals(b1), is(true)); assertThat(b3.equals(b3), is(true)); } @Test public void testEqualsNormal() { PlainDate date = PlainDate.of(2014, 5, 21); Boundary<PlainDate> b1 = Boundary.of(IntervalEdge.OPEN, date); Boundary<PlainDate> b2 = Boundary.of(IntervalEdge.CLOSED, date); Boundary<PlainDate> b3 = Boundary.infinitePast(); Boundary<PlainDate> b4 = Boundary.infiniteFuture(); Boundary<PlainDate> b5 = Boundary.of(IntervalEdge.CLOSED, date.minus(1, CalendarUnit.DAYS)); Boundary<PlainDate> b6 = Boundary.of(IntervalEdge.OPEN, date); assertThat(b1.equals(b2), is(false)); assertThat(b1.equals(b3), is(false)); assertThat(b1.equals(b4), is(false)); assertThat(b2.equals(b3), is(false)); assertThat(b2.equals(b4), is(false)); assertThat(b3.equals(b4), is(false)); // same quasi-temporal state, but different edge assertThat(b1.equals(b5), is(false)); assertThat(b1.equals(b1), is(true)); // identity assertThat(b1.equals(b6), is(true)); // state comparison } @Test public void testHashCode() { PlainDate date = PlainDate.of(2014, 5, 21); Boundary<PlainDate> b1 = Boundary.of(IntervalEdge.OPEN, date); Boundary<PlainDate> b2 = Boundary.of(IntervalEdge.OPEN, date); assertThat(b1.hashCode(), is(b2.hashCode())); } @Test public void testToStringInfinitePast() { assertThat(Boundary.infinitePast().toString(), is("(-∞)")); } @Test public void testToStringInfiniteFuture() { assertThat(Boundary.infiniteFuture().toString(), is("(+∞)")); } @Test public void testToStringOpen() { PlainDate date = PlainDate.of(2014, 5, 21); Boundary<PlainDate> b1 = Boundary.of(IntervalEdge.OPEN, date); assertThat(b1.toString(), is("(2014-05-21)")); } @Test public void testToStringClosed() { PlainDate date = PlainDate.of(2014, 5, 21); Boundary<PlainDate> b1 = Boundary.of(IntervalEdge.CLOSED, date); assertThat(b1.toString(), is("[2014-05-21]")); } @Test public void isAfter() { PlainDate d1 = PlainDate.of(2014, 5, 21); Boundary<PlainDate> b1 = Boundary.of(IntervalEdge.OPEN, d1); PlainDate d2 = PlainDate.of(2014, 5, 22); Boundary<PlainDate> b2 = Boundary.of(IntervalEdge.OPEN, d2); PlainDate d3 = PlainDate.of(2014, 5, 20); Boundary<PlainDate> b3 = Boundary.of(IntervalEdge.CLOSED, d3); PlainDate d4 = PlainDate.of(2014, 5, 22); Boundary<PlainDate> b4 = Boundary.of(IntervalEdge.CLOSED, d4); Boundary<PlainDate> b5 = Boundary.infinitePast(); Boundary<PlainDate> b6 = Boundary.infiniteFuture(); assertThat(Boundary.isAfter(b1, b2), is(false)); assertThat(Boundary.isAfter(b2, b1), is(true)); assertThat(Boundary.isAfter(b3, b1), is(false)); assertThat(Boundary.isAfter(b4, b1), is(true)); assertThat(Boundary.isAfter(b1, b3), is(true)); assertThat(Boundary.isAfter(b1, b4), is(false)); assertThat(Boundary.isAfter(b1, b5), is(true)); assertThat(Boundary.isAfter(b1, b6), is(false)); assertThat(Boundary.isAfter(b5, b1), is(false)); assertThat(Boundary.isAfter(b6, b1), is(true)); assertThat(Boundary.isAfter(b5, b6), is(false)); assertThat(Boundary.isAfter(b6, b5), is(true)); assertThat(Boundary.isAfter(b1, b1), is(false)); } @Test public void isSimultaneous() { PlainDate d1 = PlainDate.of(2014, 5, 21); Boundary<PlainDate> b1 = Boundary.of(IntervalEdge.OPEN, d1); PlainDate d2 = PlainDate.of(2014, 5, 22); Boundary<PlainDate> b2 = Boundary.of(IntervalEdge.OPEN, d2); PlainDate d3 = PlainDate.of(2014, 5, 20); Boundary<PlainDate> b3 = Boundary.of(IntervalEdge.CLOSED, d3); PlainDate d4 = PlainDate.of(2014, 5, 22); Boundary<PlainDate> b4 = Boundary.of(IntervalEdge.CLOSED, d4); Boundary<PlainDate> b5 = Boundary.infinitePast(); Boundary<PlainDate> b6 = Boundary.infiniteFuture(); assertThat(Boundary.isSimultaneous(b1, b2), is(false)); assertThat(Boundary.isSimultaneous(b2, b1), is(false)); assertThat(Boundary.isSimultaneous(b3, b1), is(false)); assertThat(Boundary.isSimultaneous(b4, b1), is(false)); assertThat(Boundary.isSimultaneous(b1, b3), is(false)); assertThat(Boundary.isSimultaneous(b1, b4), is(false)); assertThat(Boundary.isSimultaneous(b2, b4), is(true)); assertThat(Boundary.isSimultaneous(b1, b5), is(false)); assertThat(Boundary.isSimultaneous(b1, b6), is(false)); assertThat(Boundary.isSimultaneous(b5, b1), is(false)); assertThat(Boundary.isSimultaneous(b6, b1), is(false)); assertThat(Boundary.isSimultaneous(b5, b6), is(false)); assertThat(Boundary.isSimultaneous(b6, b5), is(false)); assertThat(Boundary.isSimultaneous(b1, b1), is(true)); assertThat( Boundary.isSimultaneous(b1, Boundary.of(IntervalEdge.OPEN, d1)), is(true)); assertThat(Boundary.isSimultaneous(b5, b5), is(true)); assertThat(Boundary.isSimultaneous(b6, b6), is(true)); } }