@Nullable @Override public Scenario apply(@Nullable Scenario input) { final Scenario in = verifyNotNull(input); final Optional<TimeModel.AbstractBuilder<?>> timeModel = getTimeModel(in); final TimeModel.Builder rtb = TimeModel.builder(); if (timeModel.isPresent()) { rtb.withTickLength(timeModel.get().getTickLength()) .withTimeUnit(timeModel.get().getTimeUnit()); } return Scenario.builder(in) .removeModelsOfType(TimeModel.AbstractBuilder.class) .addModel(rtb) .build(); }
@Nullable @Override public Scenario apply(@Nullable Scenario input) { final Scenario in = verifyNotNull(input); final Optional<TimeModel.AbstractBuilder<?>> timeModel = getTimeModel(in); final TimeModel.Builder rtb = TimeModel.builder(); if (timeModel.isPresent()) { rtb.withTickLength(timeModel.get().getTickLength()) .withTimeUnit(timeModel.get().getTimeUnit()); } return Scenario.builder(in) .removeModelsOfType(TimeModel.AbstractBuilder.class) .addModel(rtb) .build(); }
@Override @Nullable public Scenario apply(@Nullable Scenario input) { final Scenario in = verifyNotNull(input); final Optional<TimeModel.AbstractBuilder<?>> timeModel = getTimeModel(in); RealtimeBuilder rtb = TimeModel.builder() .withRealTime() .withStartInClockMode(ClockMode.SIMULATED); if (timeModel.isPresent()) { // copy properties from existing time model rtb = rtb.withTickLength(timeModel.get().getTickLength()) .withTimeUnit(timeModel.get().getTimeUnit()); } // else: in this case we don't copy properties, we use the defaults return Scenario.builder(in) .removeModelsOfType(TimeModel.AbstractBuilder.class) .addModel(rtb) .build(); }
@Override @Nullable public Scenario apply(@Nullable Scenario input) { final Scenario in = verifyNotNull(input); final Optional<TimeModel.AbstractBuilder<?>> timeModel = getTimeModel(in); RealtimeBuilder rtb = TimeModel.builder() .withRealTime() .withStartInClockMode(ClockMode.SIMULATED); if (timeModel.isPresent()) { // copy properties from existing time model rtb = rtb.withTickLength(timeModel.get().getTickLength()) .withTimeUnit(timeModel.get().getTimeUnit()); } // else: in this case we don't copy properties, we use the defaults return Scenario.builder(in) .removeModelsOfType(TimeModel.AbstractBuilder.class) .addModel(rtb) .build(); }
/** * @return The models to test. */ @Parameters public static Collection<Object[]> data() { return asList(new Object[][] { {TimeModel.builder().withRealTime().withTickLength(100L)} }); }
/** * @return The models to test. */ @Parameters public static Collection<Object[]> data() { return asList(new Object[][] { {TimeModel.builder().withRealTime().withTickLength(100L)} }); }
@Override public ImmutableSet<ModelBuilder<?, ?>> getModelBuilders() { return ImmutableSet.<ModelBuilder<?, ?>>builder() .add( TimeModel.builder() .withTickLength(1L) .withTimeUnit(NonSI.MINUTE)) .add( RoadModelBuilders.plane() .withMinPoint(getMin()) .withMaxPoint(getMax()) .withDistanceUnit(SI.KILOMETER) .withMaxSpeed(MAX_SPEED) .withSpeedUnit( SI.KILOMETRE.divide(NonSI.MINUTE).asType(Velocity.class))) .add( DefaultPDPModel.builder() .withTimeWindowPolicy(TimeWindowPolicies.TARDY_ALLOWED)) .add( StatsTracker.builder()) .build(); }
/** * Tests that IAE is thrown when there are too many time models. */ @Test public void testTooManyTimeModels() { final Scenario s = Scenario.builder() .addModel(TimeModel.builder()) .addModel(TimeModel.builder().withRealTime()) .build(); boolean fail = false; try { ScenarioConverters.toRealtime().apply(s); } catch (final IllegalArgumentException e) { fail = true; assertThat(e.getMessage()) .isEqualTo("More than one time model is not supported."); } assertThat(fail).isTrue(); } }
Simulator(Builder b) { modelManager = b.mmBuilder .add(SimulatorModelBuilder.create(this)) .addDefaultProvider( RandomModel.builder().withRandomGenerator( StochasticSuppliers.constant(b.rng))) .addDefaultProvider( TimeModel.builder() .withTickLength(b.tickLength) .withTimeUnit(b.timeUnit)) .build(); toUnregister = new LinkedHashSet<>(); clock = modelManager.getModel(TimeModel.class); rand = modelManager.getModel(RandomModel.class); }
/** * Tests {@link ScenarioIO#readerAdapter(com.google.common.base.Function)}. * @throws IOException When IO fails. */ @Test public void testReaderAdapter() throws IOException { final Scenario s = Scenario.builder() .addModel(TimeModel.builder().withTickLength(7L)) .build(); final Path tmpDir = Files.createTempDirectory("rinsim-scenario-io-test"); final Path file = Paths.get(tmpDir.toString(), "test.scen"); ScenarioIO.write(s, file); final Scenario out = ScenarioIO.reader().apply(file); final Scenario convertedOut = verifyNotNull(ScenarioIO.readerAdapter(ScenarioConverters.toRealtime()) .apply(file)); assertThat(s).isEqualTo(out); assertThat(s).isNotEqualTo(convertedOut); assertThat(convertedOut.getModelBuilders()) .contains(TimeModel.builder() .withRealTime() .withStartInClockMode(ClockMode.SIMULATED) .withTickLength(7L)); Files.delete(file); Files.delete(tmpDir); }
/** * Tests the removal of model builders. */ @Test public void testRemoveModelsOfType() { final Scenario.Builder builder = Scenario.builder(); builder.addModel(TimeModel.builder()) .addModel(TimeModel.builder().withRealTime()) .addModel(RoadModelBuilders.plane()) .addModel(CommModel.builder()); assertThat(builder.modelBuilders).hasSize(4); builder.removeModelsOfType(RoadModelBuilders.PlaneRMB.class); assertThat(builder.modelBuilders).hasSize(3); assertThat(builder.modelBuilders).containsExactly(TimeModel.builder(), TimeModel.builder().withRealTime(), CommModel.builder()); builder.removeModelsOfType(RoadModelBuilders.AbstractGraphRMB.class); builder.removeModelsOfType(TimeModel.AbstractBuilder.class); assertThat(builder.modelBuilders).hasSize(1); assertThat(builder.modelBuilders).containsExactly(CommModel.builder()); builder.removeModelsOfType(CommModel.Builder.class); assertThat(builder.modelBuilders).isEmpty(); }
/** * Tests that when no time model is available, a default is added. */ @Test public void testEmpty() { final Scenario empty = Scenario.builder().build(); assertThat(empty.getModelBuilders()).isEmpty(); final Scenario convertedEmpty = verifyNotNull(ScenarioConverters.toRealtime().apply(empty)); assertThat(convertedEmpty.getModelBuilders()) .contains(TimeModel.builder() .withRealTime() .withStartInClockMode(ClockMode.SIMULATED)); }
/** * Tests that when a time model already exists, its properties are copied. */ @Test public void testCopyProperties() { final Scenario s = Scenario.builder() .addModel(TimeModel.builder() .withTickLength(754L) .withTimeUnit(NonSI.DAY)) .addModel(CommModel.builder()) .build(); final Scenario converted = verifyNotNull(ScenarioConverters.toRealtime().apply(s)); assertThat(converted.getModelBuilders()) .contains(TimeModel.builder() .withRealTime() .withStartInClockMode(ClockMode.SIMULATED) .withTickLength(754L) .withTimeUnit(NonSI.DAY)); }
/** * Tests detection and correct error message. * @throws IOException If something goes wrong with the filesystem. */ @Test public void testGraphRmbDirectIO() throws IOException { final Graph<LengthData> g = new TableGraph<>(); g.addConnection(new Point(0, 0), new Point(1, 0)); g.addConnection(new Point(1, 1), new Point(1, 0)); final Scenario s = Scenario.builder() .addModel(TimeModel.builder().withTickLength(7L)) .addModel(RoadModelBuilders.staticGraph(Suppliers.ofInstance(g))) .build(); boolean fail = false; try { ScenarioIO.write(s); } catch (final IllegalArgumentException e) { fail = true; assertThat(e.getMessage()) .isEqualTo("A graph cannot be serialized embedded in a scenario."); } assertThat(fail).isTrue(); } }
@Before public void setUp() { model = RoadModelBuilders.plane() .withCollisionAvoidance() .withMinPoint(new Point(0, 0)) .withMaxPoint(new Point(100, 100)) .withDistanceUnit(SI.METER) .withSpeedUnit(SI.METERS_PER_SECOND) .withMaxSpeed(1) .withObjectRadius(.5d) .build(FakeDependencyProvider.builder() .add(TimeModel.builder() .withTickLength(tickLength)) .build()); }
/** * Test for ui with real time clock. */ @Test public void testRealtime() { final Simulator sim = Simulator.builder() .addModel(TimeModel.builder() .withRealTime() .withTickLength(100L)) .addModel(RoadModelBuilders.plane()) .addModel(View.builder() .withTitleAppendix("ViewTest") .withAutoClose() .withAutoPlay() .withSimulatorEndTime(1000) .with(PlaneRoadModelRenderer.builder()) .with(TestRenderer.builder())) .build(); sim.start(); }
@Before public void setUp() { sim = Simulator.builder() .addModel(TimeModel.builder() .withRealTime() .withTickLength(100L) .withTimeUnit(SI.MILLI(SI.SECOND))) .addModel(PDPRoadModel.builder(RoadModelBuilders.plane())) .addModel(DefaultPDPModel.builder()) .addModel(RtSolverModel.builder() .withSingleMode() .withThreadGrouping(useThreadGrouping)) .build(); model = sim.getModelProvider().getModel(RtSolverModel.class); rtClock = sim.getModelProvider().getModel(TimeModel.class) .get(RealtimeClockController.class); sim.register(new Depot(new Point(5, 5))); sim.register(new RouteFollowingVehicle(VehicleDTO.builder().build(), true)); }
static Scenario createScenario(long... delays) { final long endTime = 15 * 60 * 1000; final VehicleDTO vehicle = VehicleDTO.builder() .startPosition(new Point(5, 5)) .availabilityTimeWindow(TimeWindow.create(0, endTime)) .build(); final Scenario.Builder scenario = Scenario.builder() .addEvent(AddDepotEvent.create(-1, new Point(5, 5))) .addEvent(AddVehicleEvent.create(-1, vehicle)) .addEvent(AddVehicleEvent.create(-1, vehicle)) .addEvent(TimeOutEvent.create(endTime)) .addModel(PDPRoadModel.builder(RoadModelBuilders.plane()) .withAllowVehicleDiversion(true)) .addModel(DefaultPDPModel.builder()) .addModel(TimeModel.builder().withTickLength(250)) .setStopCondition(StopConditions.and( StatsStopConditions.vehiclesDoneAndBackAtDepot(), StatsStopConditions.timeOutEvent())); final long[] dls = new long[3]; System.arraycopy(delays, 0, dls, 0, delays.length); scenario .addEvent(createParcel(0, dls[0], new Point(1, 1), new Point(9, 1))); scenario .addEvent(createParcel(1, dls[1], new Point(1, 2), new Point(9, 2))); scenario .addEvent(createParcel(2, dls[2], new Point(9, 9), new Point(1, 9))); return scenario.build(); }
static Simulator.Builder init( TimedEventHandler<AddVehicleEvent> vehicleHandler, Iterable<? extends TimedEvent> events) { final Scenario scenario = Scenario.builder() .addEvent(AddDepotEvent.create(-1, new Point(5, 5))) .addEvent(AddVehicleEvent.create(-1, VehicleDTO.builder().build())) .addEvent(AddVehicleEvent.create(-1, VehicleDTO.builder().build())) .addEvents(events) .build(); final ScenarioController.Builder sb = ScenarioController.builder(scenario) .withEventHandler(AddParcelEvent.class, AddParcelEvent.defaultHandler()) .withEventHandler(AddVehicleEvent.class, vehicleHandler) .withEventHandler(AddDepotEvent.class, AddDepotEvent.defaultHandler()) .withEventHandler(TimeOutEvent.class, TimeOutEvent.ignoreHandler()) .withOrStopCondition(StatsStopConditions.vehiclesDoneAndBackAtDepot()) .withOrStopCondition(StatsStopConditions.timeOutEvent()); return Simulator.builder() .addModel(PDPRoadModel.builder(RoadModelBuilders.plane()) .withAllowVehicleDiversion(true)) .addModel(DefaultPDPModel.builder()) .addModel(TimeModel.builder() .withRealTime() .withStartInClockMode(ClockMode.SIMULATED) .withTickLength(100)) .addModel(sb) .addModel(StatsTracker.builder()); }