package de.saring.exerciseviewer.parser.impl;
import de.saring.exerciseviewer.core.EVException;
import de.saring.exerciseviewer.data.EVExercise;
import de.saring.exerciseviewer.parser.AbstractExerciseParser;
import org.junit.Before;
import org.junit.Test;
import java.time.LocalDateTime;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
/**
* This class contains all unit tests for the TimexPwxParser class.
* <p/>
* This file is based on PolarHsrRawParser.java by Remco den Breeje
* which is based PolarSRawParser.java by Stefan Saring
* <p/>
* 09/10/2010 - Added test for Timex Global Trainer PWX Parsing
* 06/01/2013 - Added test for Timex Ironman Run Trainer PWX Parsing
*
* @author Robert C. Schultz, Stefan Saring
*/
public class TimexPwxParserTest {
/**
* Instance to be tested.
*/
private AbstractExerciseParser parser;
/**
* This method initializes the environment for testing.
*/
@Before
public void setUp() throws Exception {
parser = new TimexPwxParser();
}
/**
* This method must fail on parsing an exerise file which doesn't exists.
*/
@Test
public void testParseExerciseMissingFile() {
try {
parser.parseExercise("missing-file.srd");
fail("Parse of the missing file must fail ...");
} catch (EVException e) {
}
}
/**
* This method tests the parser with an Timex Pwx Chrono Workout file
* recorded in metric units.?? Need to verify units
*/
@Test
public void testParseTimexPwxChronoWorkoutFile() throws EVException {
// parse exercise file
EVExercise exercise = parser.parseExercise("misc/testdata/timex-racetrainer-pwx/Timex20100618201200_1.pwx");
// check exercise data
assertEquals(exercise.getFileType(), EVExercise.ExerciseFileType.TIMEX_PWX);
assertEquals("Timex 843", exercise.getDeviceName());
assertEquals(LocalDateTime.of(2010, 6, 18, 20, 12, 0), exercise.getDateTime());
assertEquals("Run", exercise.getType());
assertEquals(false, exercise.getRecordingMode().isAltitude());
assertEquals(false, exercise.getRecordingMode().isSpeed());
assertEquals(false, exercise.getRecordingMode().isCadence());
assertEquals(false, exercise.getRecordingMode().isPower());
assertEquals((byte) 0, exercise.getRecordingMode().getBikeNumber());
assertEquals(10 * ((0 * 60 * 60) + (36 * 60) + 11) + 0, exercise.getDuration());
assertEquals((short) 2, exercise.getRecordingInterval());
assertEquals((short) 141, exercise.getHeartRateAVG());
assertEquals((short) 160, exercise.getHeartRateMax());
assertEquals(null, exercise.getSpeed());
assertEquals(null, exercise.getCadence());
assertEquals(null, exercise.getAltitude());
assertEquals(null, exercise.getTemperature());
assertEquals(512, exercise.getEnergy()); // This is calculated from Work
assertEquals(513, exercise.getEnergyTotal()); // This is per the device
assertEquals(36, exercise.getSumExerciseTime());
assertEquals(36, exercise.getSumRideTime());
assertEquals(0, exercise.getOdometer());
// check heart rate limits
assertEquals(6, exercise.getHeartRateLimits().length);
assertTrue(exercise.getHeartRateLimits()[0].isAbsoluteRange());
assertEquals((short) 191, exercise.getHeartRateLimits()[0].getUpperHeartRate());
assertEquals((short) 172, exercise.getHeartRateLimits()[0].getLowerHeartRate());
assertEquals((36 * 60) + 11, exercise.getHeartRateLimits()[0].getTimeBelow());
assertEquals((0 * 60) + 0, exercise.getHeartRateLimits()[0].getTimeWithin());
assertEquals((0 * 60) + 0, exercise.getHeartRateLimits()[0].getTimeAbove());
assertTrue(exercise.getHeartRateLimits()[1].isAbsoluteRange());
assertEquals((short) 171, exercise.getHeartRateLimits()[1].getUpperHeartRate());
assertEquals((short) 153, exercise.getHeartRateLimits()[1].getLowerHeartRate());
assertEquals((26 * 60) + 55, exercise.getHeartRateLimits()[1].getTimeBelow());
assertEquals((9 * 60) + 16, exercise.getHeartRateLimits()[1].getTimeWithin());
assertEquals((0 * 60) + 0, exercise.getHeartRateLimits()[1].getTimeAbove());
assertTrue(exercise.getHeartRateLimits()[2].isAbsoluteRange());
assertEquals((short) 152, exercise.getHeartRateLimits()[2].getUpperHeartRate());
assertEquals((short) 134, exercise.getHeartRateLimits()[2].getLowerHeartRate());
assertEquals((8 * 60) + 33, exercise.getHeartRateLimits()[2].getTimeBelow());
assertEquals((18 * 60) + 22, exercise.getHeartRateLimits()[2].getTimeWithin());
assertEquals((9 * 60) + 16, exercise.getHeartRateLimits()[2].getTimeAbove());
assertTrue(exercise.getHeartRateLimits()[3].isAbsoluteRange());
assertEquals((short) 133, exercise.getHeartRateLimits()[3].getUpperHeartRate());
assertEquals((short) 115, exercise.getHeartRateLimits()[3].getLowerHeartRate());
assertEquals((4 * 60) + 00, exercise.getHeartRateLimits()[3].getTimeBelow());
assertEquals((4 * 60) + 33, exercise.getHeartRateLimits()[3].getTimeWithin());
assertEquals((27 * 60) + 38, exercise.getHeartRateLimits()[3].getTimeAbove());
assertTrue(exercise.getHeartRateLimits()[4].isAbsoluteRange());
assertEquals((short) 114, exercise.getHeartRateLimits()[4].getUpperHeartRate());
assertEquals((short) 96, exercise.getHeartRateLimits()[4].getLowerHeartRate());
assertEquals((0 * 60) + 32, exercise.getHeartRateLimits()[4].getTimeBelow());
assertEquals((3 * 60) + 28, exercise.getHeartRateLimits()[4].getTimeWithin());
assertEquals((32 * 60) + 11, exercise.getHeartRateLimits()[4].getTimeAbove());
assertTrue(exercise.getHeartRateLimits()[5].isAbsoluteRange());
assertEquals((short) 159, exercise.getHeartRateLimits()[5].getUpperHeartRate());
assertEquals((short) 150, exercise.getHeartRateLimits()[5].getLowerHeartRate());
assertEquals((21 * 60) + 15, exercise.getHeartRateLimits()[5].getTimeBelow());
assertEquals((14 * 60) + 44, exercise.getHeartRateLimits()[5].getTimeWithin());
assertEquals((0 * 60) + 12, exercise.getHeartRateLimits()[5].getTimeAbove());
// check lap data (first, two from middle and last only)
float delta = 0;
assertEquals(exercise.getLapList().length, 12);
assertEquals(exercise.getLapList()[0].getTimeSplit(), 10 * ((0 * 60 * 60) + (3 * 60) + 45) + 4);
assertEquals(exercise.getLapList()[0].getHeartRateSplit(), (short) 0);
assertEquals(exercise.getLapList()[0].getHeartRateAVG(), (short) 98);
assertEquals(exercise.getLapList()[0].getHeartRateMax(), (short) 0);
assertEquals((float) (36 * 402.336 / (10 * ((0 * 60 * 60) + (3 * 60) + 45) + 4.9)), exercise.getLapList()[0].getSpeed().getSpeedAVG(), delta);
assertEquals((short) 402, exercise.getLapList()[0].getSpeed().getDistance());
assertEquals(0, exercise.getLapList()[0].getAltitude().getAltitude());
assertEquals(0, exercise.getLapList()[0].getAltitude().getAscent());
assertEquals(25, exercise.getLapList()[0].getTemperature().getTemperature());
assertEquals(exercise.getLapList()[2].getTimeSplit(), 10 * ((0 * 60 * 60) + (9 * 60) + 2) + 1);
assertEquals(exercise.getLapList()[2].getHeartRateSplit(), (short) 0);
assertEquals(exercise.getLapList()[2].getHeartRateAVG(), (short) 151);
assertEquals(exercise.getLapList()[2].getHeartRateMax(), (short) 0);
assertEquals((float) (36 * 402.336 / (1653.8)), exercise.getLapList()[2].getSpeed().getSpeedAVG(), delta);
assertEquals((short) 1207, exercise.getLapList()[2].getSpeed().getDistance());
assertEquals(0, exercise.getLapList()[2].getAltitude().getAltitude());
assertEquals(0, exercise.getLapList()[2].getAltitude().getAscent());
assertEquals(25, exercise.getLapList()[2].getTemperature().getTemperature());
assertEquals(exercise.getLapList()[4].getTimeSplit(), 10 * ((0 * 60 * 60) + (15 * 60) + 3) + 3);
assertEquals(exercise.getLapList()[4].getHeartRateSplit(), (short) 0);
assertEquals(exercise.getLapList()[4].getHeartRateAVG(), (short) 148);
assertEquals(exercise.getLapList()[4].getHeartRateMax(), (short) 0);
assertEquals((float) (36 * 402.336 / (1801.5)), exercise.getLapList()[4].getSpeed().getSpeedAVG(), delta);
assertEquals((short) 2011, exercise.getLapList()[4].getSpeed().getDistance());
assertEquals(0, exercise.getLapList()[4].getAltitude().getAltitude());
assertEquals(0, exercise.getLapList()[4].getAltitude().getAscent());
assertEquals(25, exercise.getLapList()[4].getTemperature().getTemperature());
assertEquals(exercise.getLapList()[11].getTimeSplit(), 10 * ((0 * 60 * 60) + (36 * 60) + 11) + 8);
assertEquals(exercise.getLapList()[11].getHeartRateSplit(), (short) 0);
assertEquals(exercise.getLapList()[11].getHeartRateAVG(), (short) 138);
assertEquals(exercise.getLapList()[11].getHeartRateMax(), (short) 0);
assertEquals((float) (36 * 402.336 / (1985.9)), exercise.getLapList()[11].getSpeed().getSpeedAVG(), delta);
assertEquals((short) 4828, exercise.getLapList()[11].getSpeed().getDistance());
assertEquals(0, exercise.getLapList()[11].getAltitude().getAltitude());
assertEquals(0, exercise.getLapList()[11].getAltitude().getAscent());
assertEquals(25, exercise.getLapList()[11].getTemperature().getTemperature());
// check sample data (first, two from middle and last only)
assertEquals(exercise.getSampleList().length, 1099);
assertEquals(exercise.getSampleList()[0].getHeartRate(), (short) 66);
assertEquals(exercise.getSampleList()[0].getAltitude(), (short) 0);
assertEquals(exercise.getSampleList()[0].getSpeed(), 0f, 0f);
assertEquals(exercise.getSampleList()[0].getCadence(), (short) 0);
assertEquals(exercise.getSampleList()[0].getDistance(), 0);
assertEquals(exercise.getSampleList()[333].getHeartRate(), (short) 149);
assertEquals(exercise.getSampleList()[333].getAltitude(), (short) 0);
assertEquals(exercise.getSampleList()[333].getSpeed(), 0f, 0f);
assertEquals(exercise.getSampleList()[333].getCadence(), (short) 0);
assertEquals(exercise.getSampleList()[333].getDistance(), 0);
assertEquals(exercise.getSampleList()[555].getHeartRate(), (short) 147);
assertEquals(exercise.getSampleList()[555].getAltitude(), (short) 0);
assertEquals(exercise.getSampleList()[555].getSpeed(), 0f, 0f);
assertEquals(exercise.getSampleList()[555].getCadence(), (short) 0);
assertEquals(exercise.getSampleList()[555].getDistance(), 0);
assertEquals(exercise.getSampleList()[1098].getHeartRate(), (short) 130);
assertEquals(exercise.getSampleList()[1098].getAltitude(), (short) 0);
assertEquals(exercise.getSampleList()[1098].getSpeed(), 0f, 0f);
assertEquals(exercise.getSampleList()[1098].getCadence(), (short) 0);
assertEquals(exercise.getSampleList()[1098].getDistance(), 0);
}
/**
* This method tests the parser with an Timex Global Trainer Pwx Workout file.
*/
@Test
public void testParseTimexGlobalTrainerPwxWorkoutFile() throws EVException {
// parse exercise file
EVExercise exercise = parser.parseExercise("misc/testdata/timex-globaltrainer-pwx/Timex_Global_Trainer_5Laps.pwx");
// check exercise data
assertEquals(exercise.getFileType(), EVExercise.ExerciseFileType.TIMEX_PWX);
assertEquals("Timex Global Trainer", exercise.getDeviceName());
assertEquals(LocalDateTime.of(2010, 9, 9, 17, 53, 21), exercise.getDateTime());
assertEquals("Bike", exercise.getType());
assertEquals(true, exercise.getRecordingMode().isAltitude());
assertEquals(true, exercise.getRecordingMode().isSpeed());
assertEquals(false, exercise.getRecordingMode().isCadence());
assertEquals(true, exercise.getRecordingMode().isPower());
assertEquals((byte) 0, exercise.getRecordingMode().getBikeNumber());
assertEquals(10 * ((0 * 60 * 60) + (10 * 60) + 06) + 0, exercise.getDuration());
assertEquals((short) 2, exercise.getRecordingInterval());
assertEquals((short) 145, exercise.getHeartRateAVG());
assertEquals((short) 197, exercise.getHeartRateMax());
assertEquals(exercise.getSpeed().getDistance(), 5319);
assertEquals(exercise.getSpeed().getSpeedAVG(), 31.550005, .001);
assertEquals(exercise.getSpeed().getSpeedMax(), 39.579838, .001);
assertEquals(exercise.getCadence(), null);
assertEquals(exercise.getAltitude().getAltitudeMin(), 0);
assertEquals(exercise.getAltitude().getAltitudeMax(), 59);
assertEquals(exercise.getAltitude().getAltitudeAVG(), 0); // Global Trainer doesn't provide this data.
assertEquals(exercise.getAltitude().getAscent(), 52);
assertEquals(exercise.getTemperature(), null);
assertEquals(108, exercise.getEnergy()); // This is calculated from Work
assertEquals(0, exercise.getEnergyTotal()); // This is per the device
assertEquals(10, exercise.getSumExerciseTime());
assertEquals(10, exercise.getSumRideTime());
assertEquals(5.319, exercise.getOdometer(), .4);
// check heart rate limits
assertEquals(6, exercise.getHeartRateLimits().length);
assertTrue(exercise.getHeartRateLimits()[5].isAbsoluteRange());
assertEquals((short) 200, exercise.getHeartRateLimits()[5].getUpperHeartRate());
assertEquals((short) 175, exercise.getHeartRateLimits()[5].getLowerHeartRate());
assertEquals((8 * 60) + 27, exercise.getHeartRateLimits()[5].getTimeBelow());
assertEquals((1 * 60) + 39, exercise.getHeartRateLimits()[5].getTimeWithin());
assertEquals((0 * 60) + 0, exercise.getHeartRateLimits()[5].getTimeAbove());
assertTrue(exercise.getHeartRateLimits()[4].isAbsoluteRange());
assertEquals((short) 175, exercise.getHeartRateLimits()[4].getUpperHeartRate());
assertEquals((short) 150, exercise.getHeartRateLimits()[4].getLowerHeartRate());
assertEquals((6 * 60) + 36, exercise.getHeartRateLimits()[4].getTimeBelow());
assertEquals((1 * 60) + 51, exercise.getHeartRateLimits()[4].getTimeWithin());
assertEquals((1 * 60) + 39, exercise.getHeartRateLimits()[4].getTimeAbove());
assertTrue(exercise.getHeartRateLimits()[3].isAbsoluteRange());
assertEquals((short) 150, exercise.getHeartRateLimits()[3].getUpperHeartRate());
assertEquals((short) 125, exercise.getHeartRateLimits()[3].getLowerHeartRate());
assertEquals((0 * 60) + 59, exercise.getHeartRateLimits()[3].getTimeBelow());
assertEquals((5 * 60) + 46, exercise.getHeartRateLimits()[3].getTimeWithin());
assertEquals((3 * 60) + 20, exercise.getHeartRateLimits()[3].getTimeAbove());
assertTrue(exercise.getHeartRateLimits()[2].isAbsoluteRange());
assertEquals((short) 125, exercise.getHeartRateLimits()[2].getUpperHeartRate());
assertEquals((short) 100, exercise.getHeartRateLimits()[2].getLowerHeartRate());
assertEquals((0 * 60) + 14, exercise.getHeartRateLimits()[2].getTimeBelow());
assertEquals((0 * 60) + 55, exercise.getHeartRateLimits()[2].getTimeWithin());
assertEquals((8 * 60) + 57, exercise.getHeartRateLimits()[2].getTimeAbove());
assertTrue(exercise.getHeartRateLimits()[1].isAbsoluteRange());
assertEquals((short) 100, exercise.getHeartRateLimits()[1].getUpperHeartRate());
assertEquals((short) 75, exercise.getHeartRateLimits()[1].getLowerHeartRate());
assertEquals((0 * 60) + 0, exercise.getHeartRateLimits()[1].getTimeBelow());
assertEquals((0 * 60) + 14, exercise.getHeartRateLimits()[1].getTimeWithin());
assertEquals((9 * 60) + 52, exercise.getHeartRateLimits()[1].getTimeAbove());
assertTrue(exercise.getHeartRateLimits()[0].isAbsoluteRange());
assertEquals((short) 75, exercise.getHeartRateLimits()[0].getUpperHeartRate());
assertEquals((short) 50, exercise.getHeartRateLimits()[0].getLowerHeartRate());
assertEquals((0 * 60) + 0, exercise.getHeartRateLimits()[0].getTimeBelow());
assertEquals((0 * 60) + 0, exercise.getHeartRateLimits()[0].getTimeWithin());
assertEquals((10 * 60) + 6, exercise.getHeartRateLimits()[0].getTimeAbove());
// check last lap data
assertEquals(exercise.getLapList().length, 5);
assertEquals(exercise.getLapList()[4].getTimeSplit(), 10 * ((0 * 60 * 60) + (10 * 60) + 6) + 9);
assertEquals(exercise.getLapList()[4].getHeartRateSplit(), (short) 0);
assertEquals(exercise.getLapList()[4].getHeartRateAVG(), (short) 128);
assertEquals(exercise.getLapList()[4].getHeartRateMax(), (short) 135);
assertEquals((float) (32.86), exercise.getLapList()[4].getSpeed().getSpeedAVG(), .01);
assertEquals((short) 5316, exercise.getLapList()[4].getSpeed().getDistance());
assertEquals(26, exercise.getLapList()[4].getAltitude().getAltitude());
assertEquals(26, exercise.getLapList()[4].getAltitude().getAscent());
assertEquals(25, exercise.getLapList()[4].getTemperature().getTemperature());
// check sample data (first, two from middle and last only)
assertEquals(exercise.getSampleList().length, 300);
assertEquals(exercise.getSampleList()[0].getHeartRate(), (short) 76);
assertEquals(exercise.getSampleList()[0].getAltitude(), (short) 38);
assertEquals(exercise.getSampleList()[0].getSpeed(), 1.56, 0.01f);
assertEquals(exercise.getSampleList()[0].getCadence(), (short) 0);
assertEquals(exercise.getSampleList()[0].getDistance(), 0);
assertEquals(exercise.getSampleList()[5].getHeartRate(), (short) 90);
assertEquals(exercise.getSampleList()[5].getAltitude(), (short) 39);
assertEquals(exercise.getSampleList()[5].getSpeed(), 17.89, .1f);
assertEquals(exercise.getSampleList()[5].getCadence(), (short) 0);
assertEquals(exercise.getSampleList()[5].getDistance(), 28);
assertEquals(exercise.getSampleList()[299].getHeartRate(), (short) 124);
assertEquals(exercise.getSampleList()[299].getAltitude(), (short) 13);
assertEquals(exercise.getSampleList()[299].getSpeed(), 10.17f, 0.01f);
assertEquals(exercise.getSampleList()[299].getCadence(), (short) 0);
assertEquals(exercise.getSampleList()[299].getDistance(), 5310);
}
/**
* This method tests the parser with an Timex Ironman Run Trainer Pwx workout file.
*/
@Test
public void testParseTimexRunTrainerPwxFile() throws EVException {
// parse exercise file
EVExercise exercise = parser.parseExercise(
"misc/testdata/timex-runtrainer-pwx/Timex_Run_Trainer_2013_01_01_08_22_52.pwx");
// check exercise data
assertEquals(exercise.getFileType(), EVExercise.ExerciseFileType.TIMEX_PWX);
assertEquals("Timex Run Trainer", exercise.getDeviceName());
assertEquals(LocalDateTime.of(2013, 1, 1, 8, 22, 52), exercise.getDateTime());
assertEquals("Run", exercise.getType());
assertEquals(true, exercise.getRecordingMode().isAltitude());
assertEquals(true, exercise.getRecordingMode().isSpeed());
assertEquals(false, exercise.getRecordingMode().isCadence());
assertEquals(true, exercise.getRecordingMode().isPower());
assertEquals((byte) 0, exercise.getRecordingMode().getBikeNumber());
assertEquals(39 * 60 * 10 + 41 * 10 + 0, exercise.getDuration());
assertEquals((short) 2, exercise.getRecordingInterval());
assertEquals((short) 141, exercise.getHeartRateAVG());
assertEquals((short) 159, exercise.getHeartRateMax());
assertEquals(3869, exercise.getSpeed().getDistance());
assertEquals(5.85, exercise.getSpeed().getSpeedAVG(), 0.001);
assertEquals(7.938, exercise.getSpeed().getSpeedMax(), 0.001);
assertNull(exercise.getCadence());
assertEquals(12, exercise.getAltitude().getAltitudeMin());
assertEquals(44, exercise.getAltitude().getAltitudeAVG());
assertEquals(64, exercise.getAltitude().getAltitudeMax());
assertEquals(117, exercise.getAltitude().getAscent());
assertNull(exercise.getTemperature());
assertEquals(2324, exercise.getEnergy()); // this is probably wrong, proper parsing is unknown yet
assertEquals(0, exercise.getEnergyTotal()); // This is per the device
assertEquals(39, exercise.getSumExerciseTime());
assertEquals(39, exercise.getSumRideTime());
assertEquals(3, exercise.getOdometer());
// check heart rate limits
assertEquals(6, exercise.getHeartRateLimits().length);
assertTrue(exercise.getHeartRateLimits()[5].isAbsoluteRange());
assertEquals((short) 200, exercise.getHeartRateLimits()[5].getUpperHeartRate());
assertEquals((short) 175, exercise.getHeartRateLimits()[5].getLowerHeartRate());
assertEquals((39 * 60) + 41, exercise.getHeartRateLimits()[5].getTimeBelow());
assertEquals((0 * 60) + 0, exercise.getHeartRateLimits()[5].getTimeWithin());
assertEquals((0 * 60) + 0, exercise.getHeartRateLimits()[5].getTimeAbove());
assertTrue(exercise.getHeartRateLimits()[4].isAbsoluteRange());
assertEquals((short) 175, exercise.getHeartRateLimits()[4].getUpperHeartRate());
assertEquals((short) 150, exercise.getHeartRateLimits()[4].getLowerHeartRate());
assertEquals((29 * 60) + 57, exercise.getHeartRateLimits()[4].getTimeBelow());
assertEquals((9 * 60) + 44, exercise.getHeartRateLimits()[4].getTimeWithin());
assertEquals((0 * 60) + 0, exercise.getHeartRateLimits()[4].getTimeAbove());
assertTrue(exercise.getHeartRateLimits()[3].isAbsoluteRange());
assertEquals((short) 150, exercise.getHeartRateLimits()[3].getUpperHeartRate());
assertEquals((short) 125, exercise.getHeartRateLimits()[3].getLowerHeartRate());
assertEquals((3 * 60) + 33, exercise.getHeartRateLimits()[3].getTimeBelow());
assertEquals((27 * 60) + 58, exercise.getHeartRateLimits()[3].getTimeWithin());
assertEquals((8 * 60) + 10, exercise.getHeartRateLimits()[3].getTimeAbove());
assertTrue(exercise.getHeartRateLimits()[2].isAbsoluteRange());
assertEquals((short) 125, exercise.getHeartRateLimits()[2].getUpperHeartRate());
assertEquals((short) 100, exercise.getHeartRateLimits()[2].getLowerHeartRate());
assertEquals((0 * 60) + 9, exercise.getHeartRateLimits()[2].getTimeBelow());
assertEquals((4 * 60) + 0, exercise.getHeartRateLimits()[2].getTimeWithin());
assertEquals((35 * 60) + 32, exercise.getHeartRateLimits()[2].getTimeAbove());
assertTrue(exercise.getHeartRateLimits()[1].isAbsoluteRange());
assertEquals((short) 100, exercise.getHeartRateLimits()[1].getUpperHeartRate());
assertEquals((short) 75, exercise.getHeartRateLimits()[1].getLowerHeartRate());
assertEquals((0 * 60) + 0, exercise.getHeartRateLimits()[1].getTimeBelow());
assertEquals((0 * 60) + 9, exercise.getHeartRateLimits()[1].getTimeWithin());
assertEquals((39 * 60) + 32, exercise.getHeartRateLimits()[1].getTimeAbove());
assertTrue(exercise.getHeartRateLimits()[0].isAbsoluteRange());
assertEquals((short) 75, exercise.getHeartRateLimits()[0].getUpperHeartRate());
assertEquals((short) 50, exercise.getHeartRateLimits()[0].getLowerHeartRate());
assertEquals((0 * 60) + 0, exercise.getHeartRateLimits()[0].getTimeBelow());
assertEquals((0 * 60) + 0, exercise.getHeartRateLimits()[0].getTimeWithin());
assertEquals((39 * 60) + 41, exercise.getHeartRateLimits()[0].getTimeAbove());
// check last lap data
assertEquals(1, exercise.getLapList().length);
assertEquals(39 * 60 * 10 + 41 * 10 + 2, exercise.getLapList()[0].getTimeSplit());
assertEquals((short) 0, exercise.getLapList()[0].getHeartRateSplit());
assertEquals((short) 0, exercise.getLapList()[0].getHeartRateAVG());
assertEquals((short) 0, exercise.getLapList()[0].getHeartRateMax());
assertEquals(5.85f, exercise.getLapList()[0].getSpeed().getSpeedAVG(), 0.01);
assertEquals(3868, exercise.getLapList()[0].getSpeed().getDistance());
assertEquals(0, exercise.getLapList()[0].getAltitude().getAltitude());
assertEquals(0, exercise.getLapList()[0].getAltitude().getAscent());
assertEquals(25, exercise.getLapList()[0].getTemperature().getTemperature());
// check sample data (first, two from middle and last only)
assertEquals(1191, exercise.getSampleList().length);
assertEquals(1 * 1000, exercise.getSampleList()[0].getTimestamp());
assertEquals(93, exercise.getSampleList()[0].getHeartRate());
assertEquals(16, exercise.getSampleList()[0].getAltitude());
assertEquals(0f, exercise.getSampleList()[0].getSpeed(), 0.01f);
assertEquals(0, exercise.getSampleList()[0].getCadence());
assertEquals(0, exercise.getSampleList()[0].getDistance());
assertEquals((16 * 60 + 41) * 1000, exercise.getSampleList()[500].getTimestamp());
assertEquals(136, exercise.getSampleList()[500].getHeartRate());
assertEquals(51, exercise.getSampleList()[500].getAltitude());
assertEquals(5.19f, exercise.getSampleList()[500].getSpeed(), 0.01f);
assertEquals(0, exercise.getSampleList()[500].getCadence());
assertEquals(1608, exercise.getSampleList()[500].getDistance());
assertEquals((39 * 60 + 41) * 1000, exercise.getSampleList()[1190].getTimestamp());
assertEquals(141, exercise.getSampleList()[1190].getHeartRate());
assertEquals(38, exercise.getSampleList()[1190].getAltitude());
assertEquals(5.49f, exercise.getSampleList()[1190].getSpeed(), 0.01f);
assertEquals(0, exercise.getSampleList()[1190].getCadence());
assertEquals(3869, exercise.getSampleList()[1190].getDistance());
}
}