diff --git a/VectoCore/VectoCoreTest/Integration/Declaration/HeavyLorry/HeavyLorrySimulation.cs b/VectoCore/VectoCoreTest/Integration/Declaration/HeavyLorry/HeavyLorrySimulation.cs new file mode 100644 index 0000000000000000000000000000000000000000..a1ac1c89878a204a835088310e3ebd3009b0af4e --- /dev/null +++ b/VectoCore/VectoCoreTest/Integration/Declaration/HeavyLorry/HeavyLorrySimulation.cs @@ -0,0 +1,113 @@ + + +#define singlethreaded + +using System.Collections.Immutable; +using System.IO; +using System.Linq; +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using Ninject; +using NUnit.Framework; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.InputData.FileIO.XML; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration; +using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory; +using TUGraz.VectoCore.OutputData; +using TUGraz.VectoCore.OutputData.FileIO; +using TUGraz.VectoCore.Tests.Models.Simulation; + +namespace TUGraz.VectoCore.Tests.Integration.Declaration.HeavyLorry; + + + +[TestFixture] +public class HeavyLorrySimulation +{ + + + private const string BASE_DIR = @"TestData\Integration\DeclarationMode\V24_DeclarationMode\"; + private StandardKernel _kernel; + private IXMLInputDataReader _xmlReader; + + [OneTimeSetUp] + public void OneTimeSetup() + { + _kernel = new StandardKernel(new VectoNinjectModule()); + _xmlReader = _kernel.Get<IXMLInputDataReader>(); + } + + [TestCase(@"HeavyLorry\PEV_heavyLorry_AMT_E2_realistic.xml"), + TestCase(@"HeavyLorry\Conventional_heavyLorry_AMT.xml"), + TestCase(@"HeavyLorry\PEV_heavyLorry_E3_realistic.xml"), + TestCase(@"HeavyLorry\PEV_heavyLorry_E3_realistic_TorqueLimits.xml"), + TestCase(@"HeavyLorry\PEV_heavyLorry_E3_realistic_municipal.xml"), + TestCase(@"HeavyLorry\PEV_heavyLorry_AMT_E2_pto_transm.xml"), + TestCase(@"HeavyLorry\PEV_heavyLorry_E4.xml"), + TestCase(@"HeavyLorry\Group2_HEV_S2.xml"), + TestCase(@"HeavyLorry\Group5_HEV_P2_.xml"), + ] + public void HeavyLorrySimulationTest(string jobFile) + { +#if singlethreaded + RunSimulation(jobFile, false); +#else + RunSimulation(jobFile, true); +#endif + } + + public void RunSimulation(string jobFile, bool multiThreaded = true) + { + var filePath = Path.Combine(BASE_DIR, jobFile); + var dataProvider = _xmlReader.CreateDeclaration(filePath); + var fileWriter = new FileOutputWriter(filePath); + var runsFactory = SimulatorFactory.CreateSimulatorFactory(ExecutionMode.Declaration, dataProvider, fileWriter); + runsFactory.WriteModalResults = true; + var jobContainer = new JobContainer(new MockSumWriter()){}; + //var jobContainer = new JobContainer(new MockSumWriter()) { }; + jobContainer.AddRuns(runsFactory); + PrintRuns(jobContainer, null); + + jobContainer.Execute(multiThreaded); + if (multiThreaded) { + jobContainer.WaitFinished(); + } + Assert.IsTrue(jobContainer.AllCompleted); + Assert.IsTrue(jobContainer.Runs.TrueForAll(runEntry => runEntry.Success)); + PrintRuns(jobContainer, fileWriter); + PrintFiles(fileWriter); + } + + + + + + + + + + + + + private void PrintRuns(JobContainer jobContainer, FileOutputWriter fileWriter = null) + { + foreach (var keyValuePair in jobContainer.GetProgress()) { + TestContext.WriteLine($"{keyValuePair.Key}: {keyValuePair.Value.CycleName} {keyValuePair.Value.RunName} {keyValuePair.Value.Error?.Message}" ); + //if (fileWriter != null && keyValuePair.Value.Success) { + // TestContext.AddTestAttachment(fileWriter.GetModDataFileName(keyValuePair.Value.RunName, keyValuePair.Value.CycleName, keyValuePair.Value.RunSuffix), keyValuePair.Value.RunName); + // } + + } + } + + private void PrintFiles(FileOutputWriter fileWriter) + { + //if (fileWriter.GetWrittenFiles().Count == 0) { + // Assert.Fail("No files written\n"); + //} + foreach (var keyValuePair in fileWriter.GetWrittenFiles()) { + TestContext.WriteLine($"{keyValuePair.Key} written to {keyValuePair.Value}"); + TestContext.AddTestAttachment(keyValuePair.Value, keyValuePair.Key.ToString()); + } + } +}