diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs b/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs index b9cf8a18a7ba227db4cc82927ae59b667ed004f6..47b10a23c3b87f2b9d3cfcc2a66e6df258ec1e48 100644 --- a/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs +++ b/VectoCore/VectoCoreTest/Integration/Declaration/PrimaryBus/PrimaryBusSimulation.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Net.Http.Headers; using System.Reflection; using System.Xml; using Microsoft.VisualStudio.TestPlatform.ObjectModel; @@ -16,6 +17,7 @@ using TUGraz.VectoCore.InputData.FileIO.JSON; using TUGraz.VectoCore.InputData.FileIO.XML; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation; +using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory; using TUGraz.VectoCore.OutputData; @@ -65,7 +67,8 @@ public class PrimaryBusSimulation TestCase(@"PrimaryBus/P-HEV/PrimaryCoach_P2_HEV_Base_AMT.xml", 0, TestName = "2nd Amendment PrimaryBus Coach P-HEV P2 Base AMT"), TestCase(@"PrimaryBus/P-HEV/PrimaryCoach_P2_HEV_AMT_OVC.xml", 0, TestName = "2nd Amendment PrimaryBus Coach P-HEV P2 AMT OVC"), TestCase(@"PrimaryBus/P-HEV/PrimaryCityBus_P1_HEV_Base_AT.xml", 0, TestName = "2nd Amendment PrimaryBus CityBus P-HEV P1 Base AT"), - TestCase(@"PrimaryBus/P-HEV/PrimaryCityBus_P1_HEV_AT_BD_BCVC.xml", 0, TestName= "2nd Amendment PrimaryBus CityBus P-HEV P1 Base AT - no TC"), + TestCase(@"PrimaryBus/P-HEV/PrimaryCityBus_P1_HEV_Base_AT.xml", 7, TestName = "2nd Amendment PrimaryBus CityBus P-HEV P1 Base AT - Interurban"), + TestCase(@"PrimaryBus/P-HEV/PrimaryCityBus_P1_HEV_AT_BD_BCVC.xml", 0, TestName= "2nd Amendment PrimaryBus CityBus P-HEV P1 Base AT - no TC"), TestCase(@"PrimaryBus/S-HEV/PrimaryCoach_S2_Base_AMT.xml", 0, TestName = "2nd Amendment PrimaryBus Coach S-HEV S2 Base"), TestCase(@"PrimaryBus/S-HEV/PrimaryCityBus_IEPC-S_Base.xml", 0, TestName = "2nd Amendment PrimaryBus CityBus S-HEV IEPC Base"), @@ -84,14 +87,17 @@ public class PrimaryBusSimulation TestCase(@"PrimaryCityBus_IEPC_Base.RSLT_VIF.xml", @"PEV_completedBus_2.xml", 1, TestName = "2nd Amendment CompletedBus CityBus PEV IEPC"), TestCase(@"PrimaryCoach_P2_HEV_Base_AMT.RSLT_VIF.xml", @"HEV_completedBus_2.xml", 1, TestName = "2nd Amendment CompletedBus Coach HEV P2"), TestCase(@"PrimaryCoach_P2_HEV_AMT_OVC.RSLT_VIF.xml", @"HEV_completedBus_2.xml", 1, TestName = "2nd Amendment CompletedBus Coach HEV P2 OVC"), - TestCase(@"PrimaryCityBus_P1_HEV_Base_AT.RSLT_VIF.xml", @"HEV_completedBus_2.xml", 1, TestName = "2nd Amendment CompletedBus CityBus HEV P1"), + TestCase(@"PrimaryCityBus_P1_HEV_Base_AT.RSLT_VIF.xml", @"HEV_completedBus_2.xml", 1, true, TestName = "2nd Amendment CompletedBus CityBus HEV P1 - fails on complete cycle"), TestCase(@"PrimaryCoach_S2_Base_AMT.RSLT_VIF.xml", @"HEV_completedBus_2.xml", 1, TestName = "2nd Amendment CompletedBus Coach HEV S2"), TestCase(@"PrimaryCityBus_IEPC-S_Base.RSLT_VIF.xml", @"HEV_completedBus_2.xml", 1, TestName = "2nd Amendment CompletedBus CityBus HEV IEPC-S"), TestCase(@"exempted_primary_heavyBus.RSLT_VIF.xml", @"exempted_completedBus_input_full.xml", 1, TestName = "2nd Amendment CompletedBus Exempted"), TestCase(@"IHPC", @"IHPC_completed", 1, TestName="2nd Amendment Completed Bus IHPC") ] - public void CompletedBusSimulationTest(string vifFile, string completed, int runIdx) + public void CompletedBusSimulationTest(string vifFile, string completed, int runIdx, bool full_sim = false) { + if (full_sim) { + _kernel.Rebind<IDeclarationCycleFactory>().To<DeclarationCycleFactory>().InSingletonScope(); + } var completedJob = GenerateJsonJobCompletedBus(Path.Combine(BASE_DIR_VIF, vifFile), Path.Combine(BASE_DIR_COMPLETED, completed)); var finalVif = CreateCompletedVIF(completedJob); @@ -99,6 +105,23 @@ public class PrimaryBusSimulation //RunSimulationPrimary(finalVif, runIdx); } + [TestCase(@"PrimaryCityBus_P1_HEV_Base_AT.RSLT_VIF.xml", @"HEV_completedBus_2.xml", 53804, + TestName = "2nd Amendment CompletedBus CityBus HEV P1 - failing cycle section")] + public void CompletedBusCycleSection(string vifFile, string completed, double start, + double? distance = null) + { + _kernel.Rebind<IDeclarationCycleFactory>().To<TestDeclarationCycleFactoryStartPoint>().InSingletonScope(); + var cycleFactory = _kernel.Get<IDeclarationCycleFactory>() as TestDeclarationCycleFactoryStartPoint; + + + cycleFactory!.SetStartPoint(MissionType.Interurban, start.SI<Meter>(), true, distance?.SI<Meter>()); + var completedJob = GenerateJsonJobCompletedBus(Path.Combine(BASE_DIR_VIF, vifFile), + Path.Combine(BASE_DIR_COMPLETED, completed)); + + var finalVif = CreateCompletedVIF(completedJob); + } + + [ TestCase(@"PrimaryBus/Conventional/primary_heavyBus group41_nonSmart.xml", @"Conventional_completedBus_2.xml", 0, TestName = "2nd Amendment SingleBus Conventional"), @@ -192,12 +215,12 @@ public class PrimaryBusSimulation //runsFactory.WriteModalResults = true; runsFactory.SerializeVectoRunData = true; var jobContainer = new JobContainer(new SummaryDataContainer(fileWriter)) { }; - //var jobContainer = new JobContainer(new MockSumWriter()) { }; + //var jobContainer = new JobContainer(new MockSumWriter()) { }; jobContainer.AddRuns(runsFactory); //PrintRuns(jobContainer, null); - jobContainer.Execute(multithreaded:true); + jobContainer.Execute(multithreaded:false); jobContainer.WaitFinished(); Assert.IsTrue(jobContainer.AllCompleted); Assert.IsTrue(jobContainer.Runs.TrueForAll(runEntry => runEntry.Success)); diff --git a/VectoCore/VectoCoreTest/Utils/TestDeclarationCycleFactoryVariant.cs b/VectoCore/VectoCoreTest/Utils/TestDeclarationCycleFactoryVariant.cs index 720c66ea0d5b21c5e039bf13e28b74c206a4dc64..2dc4e2c3e6f4dc91043ae52f8f1636dbd700f548 100644 --- a/VectoCore/VectoCoreTest/Utils/TestDeclarationCycleFactoryVariant.cs +++ b/VectoCore/VectoCoreTest/Utils/TestDeclarationCycleFactoryVariant.cs @@ -42,6 +42,7 @@ namespace TUGraz.VectoCore.Tests.Utils public class TestDeclarationCycleFactoryStartPoint : DeclarationCycleFactory { + private bool _shortMissing = false; private readonly Dictionary<MissionType, (Meter start, Meter distance)> _startPointDict = new Dictionary<MissionType, (Meter start, Meter distance)>(); #region Implementation of IDeclarationCycleFactory /// <summary> @@ -49,10 +50,12 @@ namespace TUGraz.VectoCore.Tests.Utils /// </summary> /// <param name="missionType"></param> /// <param name="startPoint"></param> + /// <param name="shortMissing">if set to true, the last section of all cycle that are not specified is simulated</param> /// <param name="distance"></param> - public void SetStartPoint(MissionType missionType, Meter startPoint, Meter distance = null) + public void SetStartPoint(MissionType missionType, Meter startPoint, bool shortMissing, Meter distance = null) { _startPointDict[missionType] = (start: startPoint, distance: distance); + _shortMissing = shortMissing; } /// <summary> /// Sets start point for all missions @@ -71,10 +74,22 @@ namespace TUGraz.VectoCore.Tests.Utils var cycle = base.GetDeclarationCycle(mission); if (_startPointDict.TryGetValue(mission.MissionType, out var entry)) { RestrictCycle(cycle, entry); + } else if(_shortMissing) { + LastSection(cycle); } return cycle; } + private void LastSection(DrivingCycleData cycle) + { + var entries = cycle.Entries; + var stop = entries.Last(); + var start = entries.Last(e => e.VehicleTargetSpeed.IsEqual(0) + && !e.Distance.IsEqual(stop.Distance)); + entries.RemoveAll(e => + e.Distance.IsSmaller(start.Distance) || e.Distance.IsGreater(stop.Distance)); + } + private void RestrictCycle(DrivingCycleData cycle, (Meter start, Meter distance) startPoint) { @@ -86,7 +101,7 @@ namespace TUGraz.VectoCore.Tests.Utils .Where(e => e.Distance.IsSmallerOrEqual(startPoint.start) && e.VehicleTargetSpeed.IsEqual(0)) //Select all points before startpoint .MinBy(e => startPoint.start - e.Distance) ?? startEntry; //select the nearest one; - + //remove entries before selected start point //var startIdx = entries.FindIndex(e => e.Distance.IsEqual(startEntry.Distance)); //entries.RemoveRange(0, startIdx);