package org.envirocar.algorithm; import org.envirocar.core.entity.Measurement; import org.envirocar.obd.events.PropertyKeyEvent; import org.hamcrest.CoreMatchers; import org.junit.Assert; import org.junit.Test; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.List; import rx.observers.TestSubscriber; import rx.schedulers.Schedulers; public class InterpolationMeasurementProviderTest { @Test public void testInterpolateTwo() { InterpolationMeasurementProvider imp = new InterpolationMeasurementProvider(); PropertyKeyEvent s1 = new PropertyKeyEvent(Measurement.PropertyKey.SPEED, 52, 1000); PropertyKeyEvent s2 = new PropertyKeyEvent(Measurement.PropertyKey.SPEED, 95, 4000); //the temporal center, should be the average double result = imp.interpolateTwo(s1.getValue(), s2.getValue(), 2500, s1.getTimestamp(), s2.getTimestamp()); Assert.assertThat(result, CoreMatchers.is(73.5)); //more at the and of the window result = imp.interpolateTwo(s1.getValue(), s2.getValue(), 3000, s1.getTimestamp(), s2.getTimestamp()); BigDecimal bd = new BigDecimal(result); bd = bd.setScale(2, RoundingMode.HALF_UP); Assert.assertThat(bd.doubleValue(), CoreMatchers.is(80.67)); } @Test public void testInterpolation() { InterpolationMeasurementProvider imp = new InterpolationMeasurementProvider(); PropertyKeyEvent m1 = new PropertyKeyEvent(Measurement.PropertyKey.MAF, 16.0, 1000); PropertyKeyEvent m2 = new PropertyKeyEvent(Measurement.PropertyKey.MAF, 48.0, 3500); // this should be the result PropertyKeyEvent m3 = new PropertyKeyEvent(Measurement.PropertyKey.MAF, 32.0, 5000); //the result should be 68.125 PropertyKeyEvent s1 = new PropertyKeyEvent(Measurement.PropertyKey.SPEED, 52, 2000); PropertyKeyEvent s2 = new PropertyKeyEvent(Measurement.PropertyKey.SPEED, 95, 6000); imp.consider(s1); imp.consider(s2); imp.consider(m1); imp.consider(m2); imp.consider(m3); imp.newPosition(new MeasurementProvider.Position(1000, 52.0, 7.0)); imp.newPosition(new MeasurementProvider.Position(3500, 52.5, 7.25)); //this should be the result TestSubscriber<Measurement> ts = new TestSubscriber<Measurement>(); imp.measurements(500) .subscribeOn(Schedulers.immediate()) .observeOn(Schedulers.immediate()) .first() .subscribe(ts); List<Measurement> events = ts.getOnNextEvents(); Assert.assertThat(events.size(), CoreMatchers.is(1)); Measurement first = events.get(0); Assert.assertThat(first.getTime(), CoreMatchers.is(3500L)); Assert.assertThat(first.getProperty(Measurement.PropertyKey.MAF), CoreMatchers.is(48.0)); Assert.assertThat(first.getProperty(Measurement.PropertyKey.SPEED), CoreMatchers.is(68.125)); Assert.assertThat(first.getLatitude(), CoreMatchers.is(52.5)); Assert.assertThat(first.getLongitude(), CoreMatchers.is(7.25)); } }