@Test // see MATSIM-770 public void testWriteReadZeroChangeEvents() { final String fileName = this.utils.getOutputDirectory() + "zeroChanges.xml"; List<NetworkChangeEvent> changeEvents = new ArrayList<>(); new NetworkChangeEventsWriter().write(fileName, changeEvents); Network network = NetworkUtils.createNetwork(); List<NetworkChangeEvent> changeEvents2 = new ArrayList<>(); new NetworkChangeEventsParser(network, changeEvents2).readFile(fileName); // the main test is that there is no exception Assert.assertTrue(changeEvents2.isEmpty()); }
/** * Loads the network into the scenario of this class */ private void loadNetwork() { if ((this.config.network() != null) && (this.config.network().getInputFile() != null)) { URL networkUrl = this.config.network().getInputFileURL(this.config.getContext()); log.info("loading network from " + networkUrl); String inputCRS = config.network().getInputCRS(); MatsimNetworkReader reader = new MatsimNetworkReader( inputCRS, config.global().getCoordinateSystem(), this.scenario.getNetwork()); reader.putAttributeConverters( attributeConverters ); reader.parse(networkUrl); if ((this.config.network().getChangeEventsInputFile()!= null) && this.config.network().isTimeVariantNetwork()) { log.info("loading network change events from " + this.config.network().getChangeEventsInputFileUrl(this.config.getContext()).getFile()); Network network = this.scenario.getNetwork(); List<NetworkChangeEvent> changeEvents = new ArrayList<>() ; NetworkChangeEventsParser parser = new NetworkChangeEventsParser(network,changeEvents); parser.parse(this.config.network().getChangeEventsInputFileUrl(config.getContext())); NetworkUtils.setNetworkChangeEvents(network,changeEvents); } } }
@Test public void testWriteChangeEventWithSmallValueAndReadBack() { final String fileName = utils.getOutputDirectory() + "wurst.xml"; final Network network = NetworkUtils.createNetwork(); Node node1 = NetworkUtils.createAndAddNode(network, Id.create("1", Node.class), new Coord((double) 0, (double) 0)); Node node2 = NetworkUtils.createAndAddNode(network, Id.create("2", Node.class), new Coord((double) 0, (double) 1000)); final Link link = NetworkUtils.createAndAddLink(network, Id.create("2", Link.class), node1, node2, (double) 1500, 1.667, (double) 3600, (double) 1); List<NetworkChangeEvent> outputEvents = new ArrayList<>(); final NetworkChangeEvent event = new NetworkChangeEvent(0.0); event.setFlowCapacityChange(new NetworkChangeEvent.ChangeValue(NetworkChangeEvent.ChangeType.ABSOLUTE_IN_SI_UNITS, 0.000000000004)); event.addLink(link); outputEvents.add(event); new NetworkChangeEventsWriter().write(fileName, outputEvents); List<NetworkChangeEvent> inputEvents = new ArrayList<>(); NetworkChangeEventsParser parser = new NetworkChangeEventsParser(network, inputEvents); parser.readFile(fileName); assertThat(inputEvents, hasItem(event)); }
@Test public void testScaleFactorChangeEvents() { final Network network = NetworkUtils.createNetwork(); Node node1 = NetworkUtils.createAndAddNode(network, Id.create("1", Node.class), new Coord((double) 0, (double) 0)); Node node2 = NetworkUtils.createAndAddNode(network, Id.create("2", Node.class), new Coord((double) 0, (double) 1000)); final Link link = NetworkUtils.createAndAddLink(network, Id.create("2", Link.class), node1, node2, (double) 1500, 1.667, (double) 3600, (double) 1); final String fileName = this.utils.getOutputDirectory() + "scalefactorChanges.xml"; List<NetworkChangeEvent> changeEvents = new ArrayList<>(); final NetworkChangeEvent event = new NetworkChangeEvent(200.0); event.setLanesChange(new NetworkChangeEvent.ChangeValue(NetworkChangeEvent.ChangeType.FACTOR, 2.5)); event.addLink(link); changeEvents.add(event); new NetworkChangeEventsWriter().write(fileName, changeEvents); List<NetworkChangeEvent> changeEvents2 = new ArrayList<>(); new NetworkChangeEventsParser(network, changeEvents2).readFile(fileName); Assert.assertFalse(changeEvents2.isEmpty()); Assert.assertEquals(1, changeEvents2.size()); NetworkChangeEvent event2 = changeEvents2.get(0); Assert.assertEquals(event.getStartTime(), event2.getStartTime(), 0.0); Assert.assertEquals(NetworkChangeEvent.ChangeType.FACTOR, event2.getLanesChange().getType()); Assert.assertEquals(event.getLanesChange().getValue(), event2.getLanesChange().getValue(), 1e-10); }
@Test public void testAbsoluteChangeEvents() { final Network network = NetworkUtils.createNetwork(); Node node1 = NetworkUtils.createAndAddNode(network, Id.create("1", Node.class), new Coord((double) 0, (double) 0)); Node node2 = NetworkUtils.createAndAddNode(network, Id.create("2", Node.class), new Coord((double) 0, (double) 1000)); final Link link = NetworkUtils.createAndAddLink(network, Id.create("2", Link.class), node1, node2, (double) 1500, 1.667, (double) 3600, (double) 1); final String fileName = this.utils.getOutputDirectory() + "absoluteChanges.xml"; List<NetworkChangeEvent> changeEvents = new ArrayList<>(); final NetworkChangeEvent event = new NetworkChangeEvent(100.0); event.setFlowCapacityChange(new NetworkChangeEvent.ChangeValue(NetworkChangeEvent.ChangeType.ABSOLUTE_IN_SI_UNITS, 0.000000000005)); event.addLink(link); changeEvents.add(event); new NetworkChangeEventsWriter().write(fileName, changeEvents); List<NetworkChangeEvent> changeEvents2 = new ArrayList<>(); new NetworkChangeEventsParser(network, changeEvents2).readFile(fileName); Assert.assertFalse(changeEvents2.isEmpty()); Assert.assertEquals(1, changeEvents2.size()); NetworkChangeEvent event2 = changeEvents2.get(0); Assert.assertEquals(event.getStartTime(), event2.getStartTime(), 0.0); Assert.assertEquals(NetworkChangeEvent.ChangeType.ABSOLUTE_IN_SI_UNITS, event2.getFlowCapacityChange().getType()); Assert.assertEquals(event.getFlowCapacityChange().getValue(), event2.getFlowCapacityChange().getValue(), 1e-10); }
@Test public void testNegativeOffsetChangeEvents() { final Network network = NetworkUtils.createNetwork(); Node node1 = NetworkUtils.createAndAddNode(network, Id.create("1", Node.class), new Coord((double) 0, (double) 0)); Node node2 = NetworkUtils.createAndAddNode(network, Id.create("2", Node.class), new Coord((double) 0, (double) 1000)); final Link link = NetworkUtils.createAndAddLink(network, Id.create("2", Link.class), node1, node2, (double) 1500, 1.667, (double) 3600, (double) 1); final String fileName = this.utils.getOutputDirectory() + "offsetChanges.xml"; List<NetworkChangeEvent> changeEvents = new ArrayList<>(); final NetworkChangeEvent event = new NetworkChangeEvent(300.0); event.setFreespeedChange(new NetworkChangeEvent.ChangeValue(NetworkChangeEvent.ChangeType.OFFSET_IN_SI_UNITS, -3.6)); event.addLink(link); changeEvents.add(event); new NetworkChangeEventsWriter().write(fileName, changeEvents); List<NetworkChangeEvent> changeEvents2 = new ArrayList<>(); new NetworkChangeEventsParser(network, changeEvents2).readFile(fileName); Assert.assertFalse(changeEvents2.isEmpty()); Assert.assertEquals(1, changeEvents2.size()); NetworkChangeEvent event2 = changeEvents2.get(0); Assert.assertEquals(event.getStartTime(), event2.getStartTime(), 0.0); Assert.assertEquals(NetworkChangeEvent.ChangeType.OFFSET_IN_SI_UNITS, event2.getFreespeedChange().getType()); Assert.assertEquals(event.getFreespeedChange().getValue(), event2.getFreespeedChange().getValue(), 1e-10); }
@Test public void testPositiveOffsetChangeEvents() { final Network network = NetworkUtils.createNetwork(); Node node1 = NetworkUtils.createAndAddNode(network, Id.create("1", Node.class), new Coord((double) 0, (double) 0)); Node node2 = NetworkUtils.createAndAddNode(network, Id.create("2", Node.class), new Coord((double) 0, (double) 1000)); final Link link = NetworkUtils.createAndAddLink(network, Id.create("2", Link.class), node1, node2, (double) 1500, 1.667, (double) 3600, (double) 1); final String fileName = this.utils.getOutputDirectory() + "offsetChanges.xml"; List<NetworkChangeEvent> changeEvents = new ArrayList<>(); final NetworkChangeEvent event = new NetworkChangeEvent(300.0); event.setFreespeedChange(new NetworkChangeEvent.ChangeValue(NetworkChangeEvent.ChangeType.OFFSET_IN_SI_UNITS, +3.6)); event.addLink(link); changeEvents.add(event); new NetworkChangeEventsWriter().write(fileName, changeEvents); List<NetworkChangeEvent> changeEvents2 = new ArrayList<>(); new NetworkChangeEventsParser(network, changeEvents2).readFile(fileName); Assert.assertFalse(changeEvents2.isEmpty()); Assert.assertEquals(1, changeEvents2.size()); NetworkChangeEvent event2 = changeEvents2.get(0); Assert.assertEquals(event.getStartTime(), event2.getStartTime(), 0.0); Assert.assertEquals(NetworkChangeEvent.ChangeType.OFFSET_IN_SI_UNITS, event2.getFreespeedChange().getType()); Assert.assertEquals(event.getFreespeedChange().getValue(), event2.getFreespeedChange().getValue(), 1e-10); }
@Test public void testChangeEventsParserWriter() { String input = utils.getInputDirectory() + "testNetworkChangeEvents.xml"; String output = utils.getOutputDirectory() + "outputTestNetworkChangeEvents.xml"; final Network network = NetworkUtils.createNetwork(); NetworkFactory nf = network.getFactory(); nf.setLinkFactory(new VariableIntervalTimeVariantLinkFactory()); ((NetworkImpl)network).setFactory(nf); Node node1 = NetworkUtils.createAndAddNode(network, Id.create("1", Node.class), new Coord((double) 0, (double) 0)); Node node2 = NetworkUtils.createAndAddNode(network, Id.create("2", Node.class), new Coord((double) 0, (double) 1000)); Node node3 = NetworkUtils.createAndAddNode(network, Id.create("3", Node.class), new Coord((double) 1000, (double) 2000)); NetworkUtils.createAndAddLink(network,Id.create("1", Link.class), node1, node2, (double) 1000, 1.667, (double) 3600, (double) 1 ); NetworkUtils.createAndAddLink(network,Id.create("2", Link.class), node2, node3, (double) 1500, 1.667, (double) 3600, (double) 1 ); List<NetworkChangeEvent> events = new ArrayList<>(); NetworkChangeEventsParser parser = new NetworkChangeEventsParser(network, events ); parser.readFile(input); new NetworkChangeEventsWriter().write(output, events); long checksum_ref = CRCChecksum.getCRCFromFile(input); long checksum_run = CRCChecksum.getCRCFromFile(output); assertEquals(checksum_ref, checksum_run); }