@Override public void addObjectAtSamePosition(RoadUser newObj, RoadUser existingObj) { checkExists(existingObj); addObjectAt(newObj, getPosition(existingObj)); }
@Override public void tick(TimeLapse timeLapse) { if (!destination.isPresent()) { nextDestination(); } roadModel.get().followPath(this, path, timeLapse); if (roadModel.get().getPosition(this).equals(destination.get())) { nextDestination(); } }
@Override public void tick(TimeLapse timeLapse) { if (!destination.isPresent()) { nextDestination(); } roadModel.get().followPath(this, path, timeLapse); if (roadModel.get().getPosition(this).equals(destination.get())) { nextDestination(); } }
/** * Test that <code>addObjectAtSamePosition</code> throws an unsupported * operation exception. */ @Test public void testAddObjectAtSamePosition() { final MovingRoadUser agv1 = new TestRoadUser(); final MovingRoadUser agv2 = new TestRoadUser(); model.addObjectAt(agv1, NW); boolean fail = false; try { model.addObjectAtSamePosition(agv2, agv1); } catch (final IllegalArgumentException e) { assertThat(e.getMessage()).contains( "can not be added on an already occupied position"); fail = true; } assertTrue(fail); final Parcel p = Parcel.builder(NW, SW).build(); model.addObjectAtSamePosition(p, agv1); assertThat(model.getPosition(agv1)).isEqualTo(model.getPosition(p)); }
/** * Tests that a vehicle can move to the position of a parcel (i.e. a parcel * should be non blocking). */ @Test public void testMoveAndPickup() { final Parcel parcel1 = Parcel.builder(NW, NE).build(); final TestAgent agent1 = new TestAgent(VehicleDTO.builder() .startPosition(NE) .speed(1d) .build()); simulator.register(parcel1); simulator.register(agent1); assertEquals(NE, rm.getPosition(agent1)); assertEquals(NW, rm.getPosition(parcel1)); assertFalse(rm.isOccupied(NW)); for (int i = 0; i < 9; i++) { simulator.tick(); } assertEquals(new Point(1, 0), rm.getPosition(agent1)); simulator.tick(); assertEquals(NW, rm.getPosition(parcel1)); assertEquals(NW, rm.getPosition(agent1)); assertTrue(pm.getContents(agent1).isEmpty()); simulator.tick(); assertFalse(rm.containsObject(parcel1)); assertEquals(pm.getContents(agent1), newLinkedHashSet(asList(parcel1))); }
/** * Test for checking that an AGV can not overtake another AGV on the same * connection. The AGV that is behind should be forced to stay behind. */ @Test public void testHeadTailCollisionAvoidance() { final MovingRoadUser agv1 = new TestRoadUser(); final MovingRoadUser agv2 = new TestRoadUser(); model.addObjectAt(agv1, NW); model.addObjectAt(agv2, SW); model.moveTo(agv1, NE, meter(3)); model.moveTo(agv2, NW, meter(1)); model.moveTo(agv2, NE, meter(20)); assertPointEquals(new Point(3, 0), model.getPosition(agv1), GraphRoadModelImpl.DELTA); assertPointEquals(new Point(2, 0), model.getPosition(agv2), GraphRoadModelImpl.DELTA); // moving is not allowed checkNoMovement(model.moveTo(agv2, NE, meter(20))); // when the object is removed, moving is allowed model.removeObject(agv1); model.moveTo(agv2, NE, meter(20)); assertPointEquals(NE, model.getPosition(agv2), GraphRoadModelImpl.DELTA); }
assertThat(model.isOccupied(C)).isTrue(); assertThat(model.isOccupied(S)).isTrue(); assertThat(model.getPosition(agv2)).isEqualTo(new Point(8, 2.25));
assertEquals(NW, model.getPosition(agv2)); assertThat(model.isOccupiedBy(NW, agv2)).isTrue();
model.getPosition(agv1), GraphRoadModelImpl.DELTA); assertPointEquals(new Point(0, 1.0), model.getPosition(agv2), GraphRoadModelImpl.DELTA); assertEquals(NW, model.getPosition(agv1)); checkNoMovement(model.moveTo(agv2, NW, meter(20))); assertEquals(1L, tl3.getTimeLeft()); model.moveTo(agv1, X, tl3); assertPointEquals(new Point(0, -1), model.getPosition(agv1), GraphRoadModelImpl.DELTA); model.moveTo(agv2, NW, meter(1)); assertEquals(NW, model.getPosition(agv2));
assertEquals(SSW, model.getPosition(agv1)); assertFalse(model.isOccupied(NW)); assertFalse(model.isOccupied(SW));