package glug.model.time; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import org.joda.time.Instant; import org.junit.Test; public class LogIntervalTest { @Test public void shouldCorrectlyReturnBeforeAndAfterForZeroDurationIntervalsForSameInstantWithDifferentLineNumbers() { Instant recordedInstant = new Instant(1234L); LogInstant logInstantA = new LogInstant(recordedInstant,344); LogInstant logInstantB = new LogInstant(recordedInstant,345); LogInterval logIntervalAtA = new LogInterval(logInstantA,logInstantA); LogInterval logIntervalAtB = new LogInterval(logInstantB,logInstantB); assertThat(logIntervalAtA.isBefore(logIntervalAtB),is(true)); assertThat(logIntervalAtB.isAfter(logIntervalAtA),is(true)); assertThat(logIntervalAtA.isAfter(logIntervalAtB),is(false)); assertThat(logIntervalAtB.isBefore(logIntervalAtA),is(false)); } @Test public void shouldDetermineIfOneIntervalContainsAnother() { LogInterval bigLogInterval = new LogInterval(new LogInstant(1000L,1),new LogInstant(5000L,5)); LogInterval smallLogInterval = new LogInterval(new LogInstant(3000L,3),new LogInstant(4000L,4)); assertThat(bigLogInterval.contains(smallLogInterval),is(true)); assertThat(smallLogInterval.contains(bigLogInterval),is(false)); } @Test public void shouldDetermineIfOneIntervalIsAfterAnother() { LogInterval earlierLogInterval = new LogInterval(new LogInstant(1000L,1),new LogInstant(3000L,3)); LogInterval laterLogInterval = new LogInterval(new LogInstant(3000L,3),new LogInstant(5000L,5)); assertThat(earlierLogInterval.isBefore(laterLogInterval),is(true)); assertThat(earlierLogInterval.isAfter(laterLogInterval),is(false)); assertThat(laterLogInterval.isBefore(earlierLogInterval),is(false)); assertThat(laterLogInterval.isAfter(earlierLogInterval),is(true)); LogInterval overlappingLogInterval = new LogInterval(new LogInstant(2000L,2),new LogInstant(4000L,4)); assertThat(overlappingLogInterval.isBefore(earlierLogInterval),is(false)); assertThat(overlappingLogInterval.isAfter(earlierLogInterval),is(false)); assertThat(overlappingLogInterval.isBefore(laterLogInterval),is(false)); assertThat(overlappingLogInterval.isAfter(laterLogInterval),is(false)); } @Test public void shouldCorrectlyDetermineIntervalIsBeforeAndIsAfterInstant() { LogInterval interval = new LogInterval(new LogInstant(1000L,2),new LogInstant(2000L,4)); LogInstant beforeInterval = new LogInstant(500L,1); assertThat(interval.isBefore(beforeInterval),is(false)); assertThat(interval.isAfter(beforeInterval),is(true)); LogInstant duringInterval = new LogInstant(1500L,3); assertThat(interval.isBefore(duringInterval),is(false)); assertThat(interval.isAfter(duringInterval),is(false)); LogInstant afterInterval = new LogInstant(3000L,5); assertThat(interval.isBefore(afterInterval),is(true)); assertThat(interval.isAfter(afterInterval),is(false)); } @Test public void shouldBeAHalfOpenIntervalInIsBeforeAndIsAfterInstant() { LogInstant lowerBound = new LogInstant(1000L,1); LogInstant upperBound = new LogInstant(2000L,2); LogInterval interval = new LogInterval(lowerBound,upperBound); assertThat(interval.isAfter(lowerBound),is(false)); assertThat(interval.isBefore(upperBound),is(true)); } @Test public void shouldCountMillisecondsWithoutEndpoint() { LogInstant lowerBound = new LogInstant(1L,1); LogInstant upperBound = new LogInstant(2L,2); LogInterval interval = new LogInterval(lowerBound,upperBound); // Only the millisecond at 1 is in the interval. assertThat(interval.toDurationMillis(),is(1L)); } @Test public void shouldCorrectlyDetermineEquality() { LogInterval interval = new LogInterval(new LogInstant(1000L,1),new LogInstant(2000L,2)); LogInterval sameInterval = new LogInterval(new LogInstant(1000L,1),new LogInstant(2000L,2)); LogInterval differentInterval = new LogInterval(new LogInstant(1000L,1),new LogInstant(1999L,2)); LogInterval anotherDifferentInterval = new LogInterval(new LogInstant(1001L,1),new LogInstant(2000L,2)); // Only the millisecond at 1 is in the interval. assertThat(interval.equals(sameInterval),is(true)); assertThat(interval.equals(differentInterval),is(false)); assertThat(interval.equals(anotherDifferentInterval),is(false)); } }