forked from upstream-mirrors/OpenTracks
0645628d7e
Part of #963.
124 lines
4.8 KiB
Java
124 lines
4.8 KiB
Java
/*
|
|
* Copyright 2010 Google Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
* use this file except in compliance with the License. You may obtain a copy of
|
|
* the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations under
|
|
* the License.
|
|
*/
|
|
package de.dennisguse.opentracks.stats;
|
|
|
|
import static org.junit.Assert.assertEquals;
|
|
import static org.junit.Assert.assertNull;
|
|
|
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
import org.junit.runner.RunWith;
|
|
|
|
import java.time.Duration;
|
|
import java.time.Instant;
|
|
|
|
import de.dennisguse.opentracks.data.models.Distance;
|
|
import de.dennisguse.opentracks.data.models.Speed;
|
|
|
|
/**
|
|
* Tests for {@link TrackStatistics}.
|
|
* This only tests non-trivial pieces of that class.
|
|
*
|
|
* @author Rodrigo Damazio
|
|
*/
|
|
@RunWith(AndroidJUnit4.class)
|
|
public class TrackStatisticsTest {
|
|
|
|
private TrackStatistics statistics;
|
|
|
|
@Before
|
|
public void setUp() {
|
|
statistics = new TrackStatistics();
|
|
}
|
|
|
|
@Test
|
|
public void testMerge_no_data() {
|
|
// given
|
|
TrackStatistics statistics2 = new TrackStatistics();
|
|
|
|
// when
|
|
statistics.merge(statistics2);
|
|
|
|
// then
|
|
assertNull(statistics.getStartTime());
|
|
assertNull(statistics.getStopTime());
|
|
assertEquals(Duration.ofSeconds(0), statistics.getMovingTime());
|
|
assertEquals(Duration.ofSeconds(0), statistics.getTotalTime());
|
|
|
|
assertNull(statistics.getTotalAltitudeGain());
|
|
assertNull(statistics.getTotalAltitudeLoss());
|
|
assertEquals(Double.NEGATIVE_INFINITY, statistics.getMaxAltitude(), 0.0);
|
|
assertEquals(Double.POSITIVE_INFINITY, statistics.getMinAltitude(), 0.0);
|
|
assertEquals(0.0, statistics.getMaxSpeed().toMPS(), 0.0);
|
|
assertEquals(0.0, statistics.getAverageSpeed().toMPS(), 0.0);
|
|
assertEquals(0.0, statistics.getAverageMovingSpeed().toMPS(), 0.0);
|
|
}
|
|
|
|
@Test
|
|
public void testMerge() {
|
|
// given
|
|
TrackStatistics statistics2 = new TrackStatistics();
|
|
statistics.setStartTime(Instant.ofEpochMilli(1000)); // Resulting start time
|
|
statistics.setStopTime(Instant.ofEpochMilli(2500));
|
|
statistics2.setStartTime(Instant.ofEpochMilli(3000));
|
|
statistics2.setStopTime(Instant.ofEpochMilli(4000)); // Resulting stop time
|
|
statistics.setTotalTime(Duration.ofMillis(1500));
|
|
statistics2.setTotalTime(Duration.ofMillis(1000)); // Result: 1500+1000
|
|
statistics.setMovingTime(Duration.ofMillis(700));
|
|
statistics2.setMovingTime(Duration.ofMillis(600)); // Result: 700+600
|
|
statistics.setTotalDistance(Distance.of(750.0));
|
|
statistics2.setTotalDistance(Distance.of(350.0)); // Result: 750+350
|
|
statistics.setTotalAltitudeGain(50.0f);
|
|
statistics2.setTotalAltitudeGain(850.0f); // Result: 850+50
|
|
statistics.setMaxSpeed(Speed.of(60.0)); // Resulting max speed
|
|
statistics2.setMaxSpeed(Speed.of(30.0));
|
|
statistics.setMaxAltitude(1250.0);
|
|
statistics.setMinAltitude(1200.0); // Resulting min altitude
|
|
statistics2.setMaxAltitude(3575.0); // Resulting max altitude
|
|
statistics2.setMinAltitude(2800.0);
|
|
|
|
// when
|
|
statistics.merge(statistics2);
|
|
|
|
// then
|
|
assertEquals(Instant.ofEpochMilli(1000), statistics.getStartTime());
|
|
assertEquals(Instant.ofEpochMilli(4000), statistics.getStopTime());
|
|
assertEquals(Duration.ofMillis(2500), statistics.getTotalTime());
|
|
assertEquals(Duration.ofMillis(1300), statistics.getMovingTime());
|
|
assertEquals(1100.0, statistics.getTotalDistance().toM(), 0.001);
|
|
assertEquals(900.0, statistics.getTotalAltitudeGain(), 0.001);
|
|
assertEquals(Speed.of(statistics.getTotalDistance(), statistics.getMovingTime()).toMPS(), statistics.getMaxSpeed().toMPS(), 0.001);
|
|
assertEquals(1200.0, statistics.getMinAltitude(), 0.001);
|
|
assertEquals(3575.0, statistics.getMaxAltitude(), 0.001);
|
|
}
|
|
|
|
@Test
|
|
public void testGetAverageSpeed() {
|
|
statistics.setTotalDistance(Distance.of(1000.0));
|
|
statistics.setTotalTime(Duration.ofMillis(50000));
|
|
assertEquals(20.0, statistics.getAverageSpeed().toMPS(), 0.001);
|
|
}
|
|
|
|
@Test
|
|
public void testGetAverageMovingSpeed() {
|
|
statistics.setTotalDistance(Distance.of(1000.0));
|
|
statistics.setMovingTime(Duration.ofMillis(20000));
|
|
assertEquals(50.0, statistics.getAverageMovingSpeed().toMPS(), 0.001);
|
|
}
|
|
}
|