From 299858180fe1069e19a7d7e70e0356ab06353c31 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Fri, 23 Jul 2021 10:57:43 +0200 Subject: [PATCH] testcase for single bus simulation - check passenger count calculation --- .../CompletedBusFactorMethodTest.cs | 93 ++++++++++++++++++- 1 file changed, 88 insertions(+), 5 deletions(-) diff --git a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs index d5619adb0b..26720ddfea 100644 --- a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs +++ b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Reflection; using System.Runtime.InteropServices.WindowsRuntime; using System.Xml; +using System.Xml.Linq; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Ninject; @@ -1147,12 +1148,13 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus xmlInputReader); var modified = GetModifiedXML(inputData, pSeatsLower, pStdLower, pSeatsUpper, pStdUpper); - + var completedVif = xmlInputReader.CreateDeclaration(XmlReader.Create(new StringReader(modified))); + var writer = new FileOutputWriter("SanityCheckTest"); //var inputData = new MockCompletedBusInputData(XmlReader.Create(PifFile_33_34), modified); //var inputData = new MockCompletedBusInputData(modified); - var factory = new SimulatorFactory(ExecutionMode.Declaration, new XMLDeclarationVIFInputData(modified, null), writer) { + var factory = new SimulatorFactory(ExecutionMode.Declaration, new XMLDeclarationVIFInputData(completedVif as IMultistageBusInputDataProvider, null), writer) { WriteModalResults = true, Validate = false }; @@ -1168,7 +1170,81 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus Assert.AreEqual(expectedPassengers + 1, ssmInputs.NumberOfPassengers, 1e-3); // adding driver for SSM } - private IMultistageBusInputDataProvider GetModifiedXML(string vifXML, int pSeatsLower, int pStdLower, int pSeatsUpper, int pStdUpper) + private const string PrimaryGrp41 = @"TestData\Integration\Buses\FactorMethod\primary_heavyBus group41_nonSmart.xml"; + private const string CompletedGrp41_32b = @"TestData\Integration\Buses\FactorMethod\vecto_vehicle-completed_heavyBus_41.xml"; + + [ + TestCase(PrimaryGrp41, CompletedGrp41_32b, 1, 20, 5, 17, 9, 51, TestName = "SingleBus PassengerCount IU RL"), + TestCase(PrimaryGrp41, CompletedGrp41_32b, 3, 20, 5, 17, 9, 37, TestName = "SingleBus PassengerCount CO RL"), + ] + public void TestPassengerCountAllocationSingleBus(string primaryFile, string completedFile, int runIdx, int pSeatsLower, int pStdLower, int pSeatsUpper, int pStdUpper, double expectedPassengers) + { + var primary = xmlInputReader.CreateDeclaration(primaryFile); + + var completedXml = new XmlDocument(); + completedXml.Load(completedFile); + var modified = GetModifiedXML(completedXml.OuterXml, pSeatsLower, pStdLower, pSeatsUpper, pStdUpper, VehicleCode.CB); + var modifiedCompleted = xmlInputReader.CreateDeclaration(XmlReader.Create(new StringReader(modified))); + + var inputData = new MockSingleBusInputDataProvider(primary.JobInputData.Vehicle, modifiedCompleted.JobInputData.Vehicle); + var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, null) { + WriteModalResults = true, + //ActualModalData = true, + Validate = false + }; + var runs = factory.DataReader.NextRun().ToList(); + var run = runs[runIdx]; + + Assert.NotNull(run.VehicleData.PassengerCount); + Assert.AreEqual(expectedPassengers, run.VehicleData.PassengerCount.Value, 1e-3); + + var ssmInputs = run.BusAuxiliaries.SSMInputs as ISSMDeclarationInputs; + Assert.NotNull(ssmInputs); + Assert.AreEqual(expectedPassengers + 1, ssmInputs.NumberOfPassengers, 1e-3); // adding driver for SSM + } + + public class MockSingleBusInputDataProvider : ISingleBusInputDataProvider, IDeclarationJobInputData + { + public MockSingleBusInputDataProvider(IVehicleDeclarationInputData primary, IVehicleDeclarationInputData completed) + { + PrimaryVehicle = primary; + CompletedVehicle = completed; + } + + #region Implementation of IInputDataProvider + + public DataSource DataSource { get; } + + #endregion + + #region Implementation of IDeclarationInputDataProvider + + public IDeclarationJobInputData JobInputData => this; + public IPrimaryVehicleInformationInputDataProvider PrimaryVehicleData { get; } + public XElement XMLHash { get; } + + #endregion + + #region Implementation of ISingleBusInputDataProvider + + public IVehicleDeclarationInputData PrimaryVehicle { get; set; } + public IVehicleDeclarationInputData CompletedVehicle { get; set; } + + #endregion + + #region Implementation of IDeclarationJobInputData + + public bool SavedInDeclarationMode => true; + public IVehicleDeclarationInputData Vehicle => PrimaryVehicle; + public string JobName { get; } + public string ShiftStrategy => ""; + public VectoSimulationJobType JobType => VectoSimulationJobType.ConventionalVehicle; + + #endregion + } + + private string GetModifiedXML(string vifXML, int pSeatsLower, int pStdLower, int pSeatsUpper, int pStdUpper, + VehicleCode? vehicleCode = null) { var vif = new XmlDocument(); vif.LoadXml(vifXML); @@ -1185,8 +1261,15 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus var pStdUpperNode = vif.SelectSingleNode("//*[local-name()='NumberPassengersStandingUpperDeck']"); pStdUpperNode.InnerText = pStdUpper.ToString(); - var completedVif = xmlInputReader.CreateDeclaration(XmlReader.Create(new StringReader(vif.OuterXml))); - return completedVif as IMultistageBusInputDataProvider; + if (vehicleCode != null) { + var bodyWorkNode = vif.SelectSingleNode("//*[local-name()='BodyworkCode']"); + bodyWorkNode.InnerText = vehicleCode.ToXMLFormat(); + + } + + return vif.OuterXml; + + } -- GitLab