package au.gov.amsa.risky.format; import static au.gov.amsa.risky.format.Downsample.minTimeStep; import static com.google.common.base.Optional.of; import static org.junit.Assert.assertEquals; import java.util.Arrays; import java.util.List; import java.util.concurrent.TimeUnit; import org.junit.Test; import rx.Observable; public class DownsampleTest { @Test public void testDownSampleOfEmptyReturnsEmpty() { int count = Observable.<Fix> empty().compose(minTimeStep(100, TimeUnit.MILLISECONDS)) .count().toBlocking().single(); assertEquals(0, count); } @Test public void testDownSampleOfOneReturnsOne() { FixImpl f = createFix(0); HasFix fix = Observable.just(f).compose(minTimeStep(100, TimeUnit.MILLISECONDS)) .toBlocking().single(); assertEquals(f, fix); } @Test public void testDownSampleOfTwoWithSmallGapReturnsFirst() { FixImpl f = createFix(0); FixImpl f2 = createFix(50); HasFix fix = Observable.just(f, f2).compose(minTimeStep(100, TimeUnit.MILLISECONDS)) .toBlocking().single(); assertEquals(f, fix); } @Test public void testDownSampleOfTwoWithBigGapReturnsTwo() { FixImpl f = createFix(0); FixImpl f2 = createFix(150); List<HasFix> fixes = Observable.<HasFix> just(f, f2) .compose(minTimeStep(100, TimeUnit.MILLISECONDS)).toList().toBlocking().single(); assertEquals(Arrays.asList(f, f2), fixes); } @Test public void testDownSampleOfThreeWithSmallGapThenBigGapReturnsOuterTwo() { FixImpl f = createFix(0); FixImpl f2 = createFix(50); FixImpl f3 = createFix(150); List<HasFix> fixes = Observable.<HasFix> just(f, f2, f3) .compose(minTimeStep(100, TimeUnit.MILLISECONDS)).toList().toBlocking().single(); assertEquals(Arrays.asList(f, f3), fixes); } @Test public void testDownSampleOfNonZeroGapWithItemsWithSameTimeReturnsFirst() { FixImpl f = createFix(50); FixImpl f2 = createFix(50); FixImpl f3 = createFix(50); List<HasFix> fixes = Observable.<HasFix> just(f, f2, f3) .compose(minTimeStep(100, TimeUnit.MILLISECONDS)).toList().toBlocking().single(); assertEquals(Arrays.asList(f), fixes); } @Test public void testDownSampleOf0ForItemsWithSameTimeReturnsAll() { FixImpl f = createFix(50); FixImpl f2 = createFix(50); FixImpl f3 = createFix(50); List<HasFix> fixes = Observable.<HasFix> just(f, f2, f3) .compose(minTimeStep(0, TimeUnit.MILLISECONDS)).toList().toBlocking().single(); assertEquals(Arrays.asList(f, f2, f3), fixes); } private static FixImpl createFix(long time) { return new FixImpl(213456789, -10f, 135f, time, of(12), of((short) 1), of(NavigationalStatus.ENGAGED_IN_FISHING), of(7.5f), of(45f), of(46f), AisClass.B); } }