@Test
public void followPath() {
assertEquals(5, path.size());
final MovingRoadUser agent = new SpeedyRoadUser(speed);
model.addObjectAt(agent, new Point(0, 0));
assertTrue(model.getPosition(agent).equals(new Point(0, 0)));
assertEquals(5, path.size());
// MOVE 1: travelling on edge A -> B (length 10), with no speed limit
MoveProgress progress = model.followPath(agent, path,
AbstractRoadModelTest.hour(2));
assertEquals(2 * speed, progress.distance.getValue(), DELTA);
assertEquals(new Point(0, 2 * speed), model.getPosition(agent));
if (speed < 5) {
progress = model.followPath(agent, path, AbstractRoadModelTest.hour(2));
assertEquals(2 * speed, progress.distance.getValue(), DELTA);
}
assertEquals(3, path.size());
assertEquals(B, model.getPosition(agent));
// MOVE 2: traveling on edge B -> C (length 10) with max speed 2.5
progress = model.followPath(agent, path, AbstractRoadModelTest.hour(2));
assertEquals(5, progress.distance.getValue(), DELTA);
assertEquals(new Point(5, 5), model.getPosition(agent));
assertEquals(3, path.size());
// traveling on edge B -> C (length 10) with max speed 2.5
progress = model.followPath(agent, path, AbstractRoadModelTest.hour(2));
assertEquals(5, progress.distance.getValue(), DELTA);