/** * 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); }
model.moveTo(agv1, NW, meter(9)); assertFalse(model.isOccupied(NW)); assertEquals(1L, tl.getTimeLeft()); model.moveTo(agv1, NW, tl); assertTrue(model.isOccupied(NW)); model.moveTo(agv2, NW, meter(10)); checkNoMovement(model.moveTo(agv2, NW, meter(20))); model.moveTo(agv1, NW, meter(1)); assertEquals(NW, model.getPosition(agv1)); checkNoMovement(model.moveTo(agv2, NW, meter(20))); model.moveTo(agv1, X, tl2); checkNoMovement(model.moveTo(agv2, NW, meter(20))); 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));
assertThat(model.isOccupied(S)).isTrue(); model.moveTo(agv1, C, meter(3)); assertThat(model.isOccupied(W)).isFalse(); assertThat(model.isOccupied(C)).isTrue(); assertThat(model.isOccupied(S)).isTrue(); model.moveTo(agv2, C, meter(1.5555555556)); assertThat(model.isOccupied(W)).isFalse(); assertThat(model.isOccupied(C)).isTrue(); assertThat(model.isOccupied(S)).isTrue(); model.moveTo(agv2, C, meter(10)); assertThat(model.isOccupied(W)).isFalse(); assertThat(model.isOccupied(C)).isTrue();
/** * Test for detection of a dead lock situation between two AGVs. The AGVs * drive on the same connection from opposite ends. An * {@link IllegalArgumentException} should be thrown at the moment the second * AGV tries to enter the connection. */ @Test public void testDetectDeadLock() { final MovingRoadUser agv1 = new TestRoadUser(); final MovingRoadUser agv2 = new TestRoadUser(); model.addObjectAt(agv1, NW); model.addObjectAt(agv2, SW); model.moveTo(agv1, SW, meter(5)); boolean fail = false; try { model.moveTo(agv2, NW, meter(1)); } catch (final DeadlockException e) { assertEquals(SW, e.getConnection().from()); assertEquals(NW, e.getConnection().to()); fail = true; } assertTrue(fail); }
model.moveTo(agv1, SSW, meter(9)); assertFalse(model.isOccupied(NW)); assertFalse(model.isOccupied(SW)); model.moveTo(agv1, SSW, meter(0.0002777777778)); assertFalse(model.isOccupied(NW)); assertTrue(model.isOccupied(SW)); model.moveTo(agv1, SSW, meter(1)); assertFalse(model.isOccupied(NW)); assertTrue(model.isOccupied(SW)); model.moveTo(agv1, SSW, meter(.5)); assertFalse(model.isOccupied(NW)); assertTrue(model.isOccupied(SW)); model.moveTo(agv1, SSW, meter(.5)); assertEquals(SSW, model.getPosition(agv1)); assertFalse(model.isOccupied(NW)); model.moveTo(agv1, SSW2, meter(.5)); assertFalse(model.isOccupied(NW)); assertFalse(model.isOccupied(SW)); model.moveTo(agv1, SSW2, meter(.4997222222)); assertFalse(model.isOccupied(NW)); assertFalse(model.isOccupied(SW)); model.moveTo(agv1, SSW2, meter(.0002777777778));