@Override public void initRoadUser(RoadModel model) { roadModel = Optional.of((CollisionGraphRoadModelImpl) model); Point p; do { p = model.getRandomPosition(rng); } while (roadModel.get().isOccupied(p)); roadModel.get().addObjectAt(this, p); }
/** * 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)); }
@Override public void initRoadUser(RoadModel model) { roadModel = Optional.of((CollisionGraphRoadModelImpl) model); Point p; do { p = model.getRandomPosition(rng); } while (roadModel.get().isOccupied(p)); roadModel.get().addObjectAt(this, p); }
@Override public void addObjectAtSamePosition(RoadUser newObj, RoadUser existingObj) { checkExists(existingObj); addObjectAt(newObj, getPosition(existingObj)); }
final MovingRoadUser agv1 = new TestRoadUser(); final MovingRoadUser agv2 = new TestRoadUser(); model.addObjectAt(agv1, NW); assertThat(model.isOccupied(NW)).isTrue(); assertThat(model.isOccupiedBy(NW, agv1)).isTrue(); boolean fail = false; try { model.addObjectAt(agv2, NW); } catch (final IllegalArgumentException e) { fail = true; model.addObjectAt(agv2, NW); } catch (final IllegalArgumentException e) { fail = true; assertThat(model.isOccupiedBy(NW, agv1)).isFalse(); model.addObjectAt(agv2, NW); assertEquals(NW, model.getPosition(agv2)); assertThat(model.isOccupiedBy(NW, agv2)).isTrue();
/** * Tests that a removed object no longer occupies its position. */ @Test public void testRemoveObject() { final MovingRoadUser agv1 = new TestRoadUser(); model.addObjectAt(agv1, NW); assertTrue(model.isOccupied(NW)); model.removeObject(agv1); assertFalse(model.isOccupied(NW)); }
/** * Tests that a unregistered object is removed. */ @Test public void testUnregisterObject() { final MovingRoadUser agv1 = new TestRoadUser(); model.addObjectAt(agv1, NW); assertTrue(model.isOccupied(NW)); model.unregister(agv1); assertFalse(model.containsObject(agv1)); assertFalse(model.isOccupied(NW)); }
/** * 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); }
assertThat(model.isOccupied(S)).isFalse(); model.addObjectAt(agv1, W); model.addObjectAt(agv2, S);
/** * 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.addObjectAt(agv1, NE); model.addObjectAt(agv2, SW);
graph.addConnection(SSW, SSW2); model.addObjectAt(agv1, NW); assertTrue(model.isOccupied(NW)); assertFalse(model.isOccupied(SW));