Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit a34eb993 authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

moving files to separate folder, adding testcase for whole vehicle simulation...

moving files to separate folder, adding testcase for whole vehicle simulation and assert adas correction factor is applied
parent c2137564
No related branches found
No related tags found
No related merge requests found
......@@ -190,6 +190,11 @@ namespace TUGraz.VectoCommon.InputData
}
return (Prefix + value.Replace(SeparatorXML, SeparatorEnum)).ParseEnum<PredictiveCruiseControlType>();
}
public static string ToXMLFormat(this PredictiveCruiseControlType pcc)
{
return pcc.ToString().Replace(Prefix, "").Replace(SeparatorEnum, SeparatorXML);
}
}
......
......@@ -29,65 +29,65 @@
* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
*/
using System.Linq;
using System.Xml;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCore.Configuration;
namespace TUGraz.VectoCore.Utils
{
public class XPathHelper
{
protected readonly ExecutionMode Mode;
protected readonly string DefaultPrefix;
public XPathHelper(ExecutionMode mode)
{
Mode = mode;
DefaultPrefix = Mode == ExecutionMode.Declaration
? Constants.XML.DeclarationNSPrefix
: Constants.XML.EngineeringNSPrefix;
}
public string Query(params string[] xpathSections)
{
return string.Join("/",
xpathSections.Select(
x => string.IsNullOrWhiteSpace(x) || x.StartsWith("..") || x.Contains(":") || x.StartsWith("@") ? x : NSPrefix(x)))
;
}
public string QueryConstraint(string elementName, string name, string value,
string prefix = "@")
{
return value == null
? string.Format("{0}[{2}{1}]", elementName, name, prefix)
: string.Format("{0}[{3}{1}='{2}']", elementName, name, value, prefix);
}
public string QueryAbs(params string[] xPathSections)
{
return string.Format("/{0}", Query(xPathSections));
}
public string NSPrefix(string element, string prefix = null)
{
if (prefix == null) {
prefix = DefaultPrefix;
}
return string.Format("{1}:{0}", element, prefix);
}
public void AddNamespaces(XmlNamespaceManager manager)
{
manager.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
if (Mode == ExecutionMode.Declaration) {
manager.AddNamespace(Constants.XML.DeclarationNSPrefix, Constants.XML.VectoDeclarationDefinitionsNS);
manager.AddNamespace(Constants.XML.RootNSPrefix, Constants.XML.VectoDeclarationInputNS);
} else {
manager.AddNamespace(Constants.XML.EngineeringNSPrefix, Constants.XML.VectoEngineeringDefinitionsNS);
manager.AddNamespace(Constants.XML.RootNSPrefix, Constants.XML.VectoEngineeringInputNS);
}
}
}
using System.Linq;
using System.Xml;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCore.Configuration;
namespace TUGraz.VectoCore.Utils
{
public class XPathHelper
{
protected readonly ExecutionMode Mode;
protected readonly string DefaultPrefix;
public XPathHelper(ExecutionMode mode)
{
Mode = mode;
DefaultPrefix = Mode == ExecutionMode.Declaration
? Constants.XML.DeclarationNSPrefix
: Constants.XML.EngineeringNSPrefix;
}
public string Query(params string[] xpathSections)
{
return string.Join("/",
xpathSections.Select(
x => string.IsNullOrWhiteSpace(x) || x.StartsWith("..") || x.Contains(":") || x.StartsWith("@") ? x : NSPrefix(x)))
;
}
public string QueryConstraint(string elementName, string name, string value,
string prefix = "@")
{
return value == null
? string.Format("{0}[{2}{1}]", elementName, name, prefix)
: string.Format("{0}[{3}{1}='{2}']", elementName, name, value, prefix);
}
public string QueryAbs(params string[] xPathSections)
{
return string.Format("/{0}", Query(xPathSections));
}
public string NSPrefix(string element, string prefix = null)
{
if (prefix == null) {
prefix = DefaultPrefix;
}
return string.Format("{1}:{0}", element, prefix);
}
public void AddNamespaces(XmlNamespaceManager manager)
{
manager.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
if (Mode == ExecutionMode.Declaration) {
manager.AddNamespace(Constants.XML.DeclarationNSPrefix, Constants.XML.VectoDeclarationDefinitionsNS);
manager.AddNamespace(Constants.XML.RootNSPrefix, Constants.XML.VectoDeclarationInputNS);
} else {
manager.AddNamespace(Constants.XML.EngineeringNSPrefix, Constants.XML.VectoEngineeringDefinitionsNS);
manager.AddNamespace(Constants.XML.RootNSPrefix, Constants.XML.VectoEngineeringInputNS);
}
}
}
}
\ No newline at end of file
using System;
using System.IO;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
using NUnit.Framework;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Resources;
using TUGraz.VectoCore.Configuration;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration;
using TUGraz.VectoCore.Models.Simulation.Impl;
using TUGraz.VectoCore.OutputData;
using TUGraz.VectoCore.OutputData.FileIO;
using TUGraz.VectoCore.Tests.Models.Simulation;
using TUGraz.VectoCore.Utils;
namespace TUGraz.VectoCore.Tests.Integration.Declaration
{
public class ADASVehicleTest
{
const string Class5ADAS = @"Testdata\Integration\DeclarationMode\Class5_ADAS\Tractor_4x2_vehicle-class-5_EURO6_2018.xml";
[OneTimeSetUp]
public void RunBeforeAnyTests()
{
Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory);
}
[TestCase(Class5ADAS, 1, false, false, false, PredictiveCruiseControlType.Option_1_2_3, 1 - 0.68/100.0),
TestCase(Class5ADAS, 5, true, true, false, PredictiveCruiseControlType.Option_1_2_3, 1 - 1.32 / 100.0)
]
public void ADASCorrectionFactorTest(string filename, int runIdx, bool engineStopStart, bool ecoRollWithoutEngineStop, bool ecoRollWithEngineStop, PredictiveCruiseControlType pcc, double expectedCorrectionFactor)
{
var reader = XmlReader.Create(filename);
var doc = new XmlDocument();
doc.Load(reader);
var nav = doc.CreateNavigator();
var manager = new XmlNamespaceManager(nav.NameTable);
var helper = new XPathHelper(ExecutionMode.Declaration);
helper.AddNamespaces(manager);
XNamespace ns = Constants.XML.VectoDeclarationDefinitionsNS;
var newAdas = new XElement(ns + XMLNames.Vehicle_ADAS,
new XElement(ns + XMLNames.Vehicle_ADAS_EngineStopStart, engineStopStart),
new XElement(ns + XMLNames.Vehicle_ADAS_EcoRollWithoutEngineStop, ecoRollWithoutEngineStop),
new XElement(ns + XMLNames.Vehicle_ADAS_EcoRollWithEngineStopStart, ecoRollWithEngineStop),
new XElement(ns + XMLNames.Vehicle_ADAS_PCC, pcc.ToXMLFormat()));
var adas = nav.SelectSingleNode(helper.QueryAbs(
helper.NSPrefix(XMLNames.VectoInputDeclaration,
Constants.XML.RootNSPrefix),
XMLNames.Component_Vehicle,
XMLNames.Vehicle_ADAS),
manager);
adas.ReplaceSelf(newAdas.ToString());// .SetValue(fuel);
var modified = XmlReader.Create(new StringReader(nav.OuterXml));
var writer = new FileOutputWriter(filename);
var inputData = new XMLDeclarationInputDataProvider(modified, true); //.ReadJsonJob(relativeJobPath);
var factory = new SimulatorFactory(ExecutionMode.Declaration, inputData, writer) {
WriteModalResults = true,
ActualModalData = true
};
var jobContainer = new JobContainer(new MockSumWriter());
jobContainer.AddRuns(factory);
var run = jobContainer.Runs[runIdx].Run;
var modContainer = ((ModalDataContainer)run.GetContainer().ModalData);
var modData = modContainer.Data;
run.Run();
modContainer.Data = modData;
var cf = modContainer.FuelConsumptionADASPerSecond() / modContainer.FuelConsumptionWHTCPerSecond();
Assert.AreEqual(expectedCorrectionFactor, cf.Value(), 1e-6);
}
}
}
......@@ -83,10 +83,11 @@
<Compile Include="Integration\BusAuxiliaries\AAuxTests.cs" />
<Compile Include="Integration\CoachAdvancedAuxPowertrain.cs" />
<Compile Include="Integration\CoachPowerTrain.cs" />
<Compile Include="Integration\Declaration\ADASVehicleTest.cs" />
<Compile Include="Integration\Declaration\EngineInputDataTests.cs" />
<Compile Include="Integration\DriverStrategy\SimpleCycles.cs" />
<Compile Include="Integration\ExemptedVehicleTest.cs" />
<Compile Include="Integration\VocationalVehicleTest.cs" />
<Compile Include="Integration\Declaration\ExemptedVehicleTest.cs" />
<Compile Include="Integration\Declaration\VocationalVehicleTest.cs" />
<Compile Include="Integration\VTP\VTPTest.cs" />
<Compile Include="Integration\FuelTypesTest.cs" />
<Compile Include="Integration\FullCycleDeclarationTest.cs">
......@@ -2712,6 +2713,9 @@
<Content Include="TestData\Integration\DeclarationMode\Class4_Vocational\Rigid Truck_4x2_vehicle-class-4_EURO6_2018.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="TestData\Integration\DeclarationMode\Class5_ADAS\Tractor_4x2_vehicle-class-5_EURO6_2018.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="TestData\Integration\DeclarationMode\Class5_Vocational\Tractor_4x2_vehicle-class-5_EURO6_2018.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment