diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs index 4e7e5c04f872d9e0526f32d956616f4ff53e10f7..93d13bd06f603c4c40c7df242c019e08e045e1ad 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs @@ -125,13 +125,18 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter axleData.Add(axle); } - axleData.AddRange(mission.TrailerAxleWeightDistribution.Select(tmp => new Axle { - AxleType = AxleType.Trailer, - AxleWeightShare = tmp, - TwinTyres = DeclarationData.Trailer.TwinTyres, - RollResistanceCoefficient = DeclarationData.Trailer.RollResistanceCoefficient, - TyreTestLoad = DeclarationData.Trailer.TyreTestLoad.SI<Newton>(), - Inertia = DeclarationData.Wheels.Lookup(DeclarationData.Trailer.WheelsType).Inertia + axleData.AddRange(mission.TrailerAxleWeightDistribution.Select(tmp => { + var wheel = mission.TrailerType != TrailerType.None + ? DeclarationData.StandardBodies.Lookup(mission.TrailerType.ToString()).Wheels + : DeclarationData.Wheels.Lookup(DeclarationData.Trailer.WheelsType); + return new Axle { + AxleType = AxleType.Trailer, + AxleWeightShare = tmp, + TwinTyres = DeclarationData.Trailer.TwinTyres, + RollResistanceCoefficient = DeclarationData.Trailer.RollResistanceCoefficient, + TyreTestLoad = DeclarationData.Trailer.TyreTestLoad.SI<Newton>(), + Inertia = wheel.Inertia + }; })); retVal.AxleData = axleData; return retVal; diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs index 3b72fa2aa8244fe4e3a833a6aa6e4ad094215be5..f351bc3df5901233fcbef4093b1738cc108196eb 100644 --- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs +++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs @@ -58,7 +58,7 @@ namespace TUGraz.VectoCore.Models.Declaration private WHTCCorrection _whtcCorrection; private AirDrag _airDrag; private TorqueConverter _torqueConverter; - private StandardWeights _standardWeights; + private StandardBodies _standardBodies; private Payloads _payloads; public static Wheels Wheels @@ -139,9 +139,9 @@ namespace TUGraz.VectoCore.Models.Declaration } } - public static StandardWeights StandardWeights + public static StandardBodies StandardBodies { - get { return Instance()._standardWeights ?? (Instance()._standardWeights = new StandardWeights()); } + get { return Instance()._standardBodies ?? (Instance()._standardBodies = new StandardBodies()); } } public static PneumaticSystem PneumaticSystem diff --git a/VectoCore/VectoCore/Models/Declaration/Segments.cs b/VectoCore/VectoCore/Models/Declaration/Segments.cs index 07294080960e31fc0d65108f6237a9669e25d60f..892732d581769fa50d65145a18a5d8068e26ad4f 100644 --- a/VectoCore/VectoCore/Models/Declaration/Segments.cs +++ b/VectoCore/VectoCore/Models/Declaration/Segments.cs @@ -108,7 +108,7 @@ namespace TUGraz.VectoCore.Models.Declaration var missionTypes = Enum.GetValues(typeof(MissionType)).Cast<MissionType>(); var missions = new List<Mission>(); foreach (var missionType in missionTypes.Where(m => row.Field<string>(m.ToString()) != "-")) { - var body = DeclarationData.StandardWeights.Lookup(row.Field<string>("body")); + var body = DeclarationData.StandardBodies.Lookup(row.Field<string>("body")); var trailerIsUsed = ShouldTrailerBeUsed(row, missionType); var trailerField = row.Field<string>("trailer"); @@ -116,13 +116,13 @@ namespace TUGraz.VectoCore.Models.Declaration ? trailerField.ParseEnum<TrailerType>() : TrailerType.None; var trailer = trailerIsUsed - ? DeclarationData.StandardWeights.Lookup(trailerField) - : DeclarationData.StandardWeights.Empty; + ? DeclarationData.StandardBodies.Lookup(trailerField) + : DeclarationData.StandardBodies.Empty; var semiTrailerField = row.Field<string>("semitrailer"); var semiTrailer = !string.IsNullOrWhiteSpace(semiTrailerField) - ? DeclarationData.StandardWeights.Lookup(semiTrailerField) - : DeclarationData.StandardWeights.Empty; + ? DeclarationData.StandardBodies.Lookup(semiTrailerField) + : DeclarationData.StandardBodies.Empty; trailer += semiTrailer; diff --git a/VectoCore/VectoCore/Models/Declaration/StandardWeights.cs b/VectoCore/VectoCore/Models/Declaration/StandardBodies.cs similarity index 65% rename from VectoCore/VectoCore/Models/Declaration/StandardWeights.cs rename to VectoCore/VectoCore/Models/Declaration/StandardBodies.cs index 44e0c5212450efd4ff5edb18ea8753147f0c2330..a47daf0ee7c6af5fb460766087c23db7e44e638d 100644 --- a/VectoCore/VectoCore/Models/Declaration/StandardWeights.cs +++ b/VectoCore/VectoCore/Models/Declaration/StandardBodies.cs @@ -29,7 +29,6 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System.CodeDom; using System.Collections.Generic; using System.Data; using System.Linq; @@ -39,8 +38,17 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.Declaration { - internal sealed class StandardWeight + internal sealed class StandardBody { + public StandardBody(Kilogram curbWeight, Kilogram grossVehicleWeight, SquareMeter deltaCrossWindArea, + Wheels.WheelsEntry wheels) + { + CurbWeight = curbWeight; + GrossVehicleWeight = grossVehicleWeight; + DeltaCrossWindArea = deltaCrossWindArea; + Wheels = wheels; + } + public Kilogram CurbWeight; public Kilogram GrossVehicleWeight; @@ -51,13 +59,14 @@ namespace TUGraz.VectoCore.Models.Declaration public SquareMeter DeltaCrossWindArea; - public static StandardWeight operator +(StandardWeight first, StandardWeight second) + public Wheels.WheelsEntry Wheels; + + public static StandardBody operator +(StandardBody first, StandardBody second) { - return new StandardWeight { - CurbWeight = first.CurbWeight + second.CurbWeight, - DeltaCrossWindArea = first.DeltaCrossWindArea + second.DeltaCrossWindArea, - GrossVehicleWeight = first.GrossVehicleWeight + second.GrossVehicleWeight - }; + return new StandardBody(first.CurbWeight + second.CurbWeight, + first.GrossVehicleWeight + second.GrossVehicleWeight, + first.DeltaCrossWindArea + second.DeltaCrossWindArea, + null); } } @@ -65,25 +74,23 @@ namespace TUGraz.VectoCore.Models.Declaration /// Lookup Class for Standard Weights of Bodies, Trailers and Semitrailers. /// Standard Weights include /// CurbWeight (=Empty Weight), - /// Gross Vehicle Weight (=Maximum Allowed Weight), and - /// MaxPayload. + /// Gross Vehicle Weight (=Maximum Allowed Weight), + /// MaxPayload, + /// DeltaCrossWindArea, + /// Wheels /// </summary> - internal sealed class StandardWeights : LookupData<string, StandardWeight> + internal sealed class StandardBodies : LookupData<string, StandardBody> { private const string ResourceId = "TUGraz.VectoCore.Resources.Declaration.Body_Trailers_Weights.csv"; - public StandardWeights() + public StandardBodies() { ParseData(ReadCsvResource(ResourceId)); } - public StandardWeight Empty = new StandardWeight { - CurbWeight = 0.SI<Kilogram>(), - GrossVehicleWeight = 0.SI<Kilogram>(), - DeltaCrossWindArea = 0.SI<SquareMeter>() - }; + public StandardBody Empty = new StandardBody(0.SI<Kilogram>(), 0.SI<Kilogram>(), 0.SI<SquareMeter>(), null); - public override StandardWeight Lookup(string id) + public override StandardBody Lookup(string id) { if (string.IsNullOrWhiteSpace(id)) { return Empty; @@ -103,11 +110,13 @@ namespace TUGraz.VectoCore.Models.Declaration Data = table.Rows.Cast<DataRow>() .ToDictionary( kv => kv.Field<string>("name"), - kv => new StandardWeight { - CurbWeight = kv.ParseDoubleOrGetDefault("curbmass").SI<Kilogram>(), - GrossVehicleWeight = kv.ParseDoubleOrGetDefault("maxgrossmass").SI<Kilogram>(), - DeltaCrossWindArea = kv.ParseDoubleOrGetDefault("deltacdxafortraileroperationinlonghaul").SI<SquareMeter>() - }); + kv => new StandardBody( + kv.ParseDoubleOrGetDefault("curbmass").SI<Kilogram>(), + kv.ParseDoubleOrGetDefault("maxgrossmass").SI<Kilogram>(), + kv.ParseDoubleOrGetDefault("deltacdxafortraileroperationinlonghaul").SI<SquareMeter>(), + !string.IsNullOrWhiteSpace(kv.Field<string>("wheels")) + ? DeclarationData.Wheels.Lookup(kv.Field<string>("wheels")) + : null)); } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/Models/Declaration/Wheels.cs b/VectoCore/VectoCore/Models/Declaration/Wheels.cs index a5f3f330cea319e0ec47f334244baf10e482fde8..dbc2aa5606bc5183a437c58423cb7cb62955cf00 100644 --- a/VectoCore/VectoCore/Models/Declaration/Wheels.cs +++ b/VectoCore/VectoCore/Models/Declaration/Wheels.cs @@ -50,7 +50,7 @@ namespace TUGraz.VectoCore.Models.Declaration return base.Lookup(key.RemoveWhitespace()); } - protected override sealed void ParseData(DataTable table) + protected sealed override void ParseData(DataTable table) { Data = (from DataRow row in table.Rows select new WheelsEntry { diff --git a/VectoCore/VectoCore/Resources/Declaration/Body_Trailers_Weights.csv b/VectoCore/VectoCore/Resources/Declaration/Body_Trailers_Weights.csv index 1fcd5eafa3359216dd9adfbdfce17d54b8c75fe7..4d88b72a97fec8927e5673d97b0b74f1e06e273c 100644 --- a/VectoCore/VectoCore/Resources/Declaration/Body_Trailers_Weights.csv +++ b/VectoCore/VectoCore/Resources/Declaration/Body_Trailers_Weights.csv @@ -1,12 +1,12 @@ -name,curb mass,max gross mass,delta CdxA for trailer operation in long haul,remark -#,[kg],[kg],[m²], -B1,1600,-,-,--- -B2,1900,-,-,--- -B3,2000,-,-,--- -B4,2100,-,-,--- -B5,2200,-,-,"""B6"" changed to ""B5"" as ""old B5"" not applicable anymore" -T1,3400,10500,1.1, -T2,5400,18000,0.6, -ST1,7500,24000,-,relevant for fully loaded is GVM of tractor semitrailer combination = 40000kg -ST1-v2,7500,-,-, -Dolly,2500,-,-,only relevant for EMS +name,curb mass,max gross mass,delta CdxA for trailer operation in long haul,Wheels,remark +#,[kg],[kg],[m²],, +B1,1600,-,-,,--- +B2,1900,-,-,,--- +B3,2000,-,-,,--- +B4,2100,-,-,,--- +B5,2200,-,-,,"""B6"" changed to ""B5"" as ""old B5"" not applicable anymore" +T1,3400,10500,1.1,235/75 R17.5, +T2,5400,18000,0.6,385/65 R22.5, +ST1,7500,24000,-,,relevant for fully loaded is GVM of tractor semitrailer combination = 40000kg +ST1-v2,7500,-,-,, +Dolly,2500,-,-,,only relevant for EMS diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index 0cba10a87976ab43fddc2b935db165cfb358feb9..e7753b6634cc97b85afda16d4ccf36d4b82af243 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -142,7 +142,7 @@ <Compile Include="Models\Declaration\PT1.cs" /> <Compile Include="Models\Declaration\Rims.cs" /> <Compile Include="Models\Declaration\Segments.cs" /> - <Compile Include="Models\Declaration\StandardWeights.cs" /> + <Compile Include="Models\Declaration\StandardBodies.cs" /> <Compile Include="Models\Declaration\SteeringPump.cs" /> <Compile Include="Models\Declaration\TorqueConverter.cs" /> <Compile Include="Models\Declaration\VehicleClass.cs" /> diff --git a/VectoCore/VectoCoreTest/FileIO/VectoCSVFileTest.cs b/VectoCore/VectoCoreTest/FileIO/VectoCSVFileTest.cs index de6b768412dc33f7d00c80e6a30471301610c840..450e460d615a5a416fff4da3e7d19e02f4e51d92 100644 --- a/VectoCore/VectoCoreTest/FileIO/VectoCSVFileTest.cs +++ b/VectoCore/VectoCoreTest/FileIO/VectoCSVFileTest.cs @@ -48,11 +48,11 @@ namespace TUGraz.VectoCore.Tests.FileIO { var table = VectoCSVFile.Read(@"TestData\test.csv"); Assert.AreEqual(3, table.Columns.Count); - Assert.IsTrue(new[] { "a", "b", "c" }.SequenceEqual(table.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + CollectionAssert.AreEqual(new[] { "a", "b", "c" }, table.Columns.Cast<DataColumn>().Select(c => c.ColumnName)); Assert.AreEqual(2, table.Rows.Count); - Assert.IsTrue(new[] { "1", "2", "3" }.SequenceEqual(table.Rows[0].ItemArray)); - Assert.IsTrue(new[] { "4", "5", "6" }.SequenceEqual(table.Rows[1].ItemArray)); + CollectionAssert.AreEqual(new[] { "1", "2", "3" }, table.Rows[0].ItemArray); + CollectionAssert.AreEqual(new[] { "4", "5", "6" }, table.Rows[1].ItemArray); } [Test] @@ -60,9 +60,8 @@ namespace TUGraz.VectoCore.Tests.FileIO { var table = VectoCSVFile.Read(@"TestData\Components\Axle.vtlm"); Assert.AreEqual(3, table.Columns.Count); - Assert.IsTrue( - new[] { "Input Speed", "Input Torque", "Torque Loss" }.SequenceEqual( - table.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + CollectionAssert.AreEqual( + new[] { "Input Speed", "Input Torque", "Torque Loss" }, table.Columns.Cast<DataColumn>().Select(c => c.ColumnName)); Assert.AreEqual(285, table.Rows.Count); } @@ -72,12 +71,11 @@ namespace TUGraz.VectoCore.Tests.FileIO var stream = "a,b,c\n1,2,3\n4,5,6".GetStream(); var table = VectoCSVFile.ReadStream(stream); - Assert.AreEqual(3, table.Columns.Count); - Assert.IsTrue(new[] { "a", "b", "c" }.SequenceEqual(table.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + CollectionAssert.AreEqual(new[] { "a", "b", "c" }, table.Columns.Cast<DataColumn>().Select(c => c.ColumnName)); Assert.AreEqual(2, table.Rows.Count); - Assert.IsTrue(new[] { "1", "2", "3" }.SequenceEqual(table.Rows[0].ItemArray)); - Assert.IsTrue(new[] { "4", "5", "6" }.SequenceEqual(table.Rows[1].ItemArray)); + CollectionAssert.AreEqual(new[] { "1", "2", "3" }, table.Rows[0].ItemArray); + CollectionAssert.AreEqual(new[] { "4", "5", "6" }, table.Rows[1].ItemArray); } [Test] @@ -86,12 +84,11 @@ namespace TUGraz.VectoCore.Tests.FileIO var stream = "1,2,3\n4,5,6".GetStream(); var table = VectoCSVFile.ReadStream(stream); - Assert.AreEqual(3, table.Columns.Count); - Assert.IsTrue(new[] { "0", "1", "2" }.SequenceEqual(table.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + CollectionAssert.AreEqual(new[] { "0", "1", "2" }, table.Columns.Cast<DataColumn>().Select(c => c.ColumnName)); Assert.AreEqual(2, table.Rows.Count); - Assert.IsTrue(new[] { "1", "2", "3" }.SequenceEqual(table.Rows[0].ItemArray)); - Assert.IsTrue(new[] { "4", "5", "6" }.SequenceEqual(table.Rows[1].ItemArray)); + CollectionAssert.AreEqual(new[] { "1", "2", "3" }, table.Rows[0].ItemArray); + CollectionAssert.AreEqual(new[] { "4", "5", "6" }, table.Rows[1].ItemArray); } [Test] @@ -101,7 +98,7 @@ namespace TUGraz.VectoCore.Tests.FileIO var table = VectoCSVFile.ReadStream(stream); Assert.AreEqual(3, table.Columns.Count); - Assert.IsTrue(new[] { "a", "b", "c" }.SequenceEqual(table.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + CollectionAssert.AreEqual(new[] { "a", "b", "c" }, table.Columns.Cast<DataColumn>().Select(c => c.ColumnName)); Assert.AreEqual(0, table.Rows.Count); } @@ -123,12 +120,11 @@ namespace TUGraz.VectoCore.Tests.FileIO 4,5,6".GetStream(); var table = VectoCSVFile.ReadStream(stream); - Assert.AreEqual(3, table.Columns.Count); - Assert.IsTrue(new[] { "a", "b", "c" }.SequenceEqual(table.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + CollectionAssert.AreEqual(new[] { "a", "b", "c" }, table.Columns.Cast<DataColumn>().Select(c => c.ColumnName)); Assert.AreEqual(2, table.Rows.Count); - Assert.IsTrue(new[] { "1", "2", "3" }.SequenceEqual(table.Rows[0].ItemArray)); - Assert.IsTrue(new[] { "4", "5", "6" }.SequenceEqual(table.Rows[1].ItemArray)); + CollectionAssert.AreEqual(new[] { "1", "2", "3" }, table.Rows[0].ItemArray); + CollectionAssert.AreEqual(new[] { "4", "5", "6" }, table.Rows[1].ItemArray); } [Test] diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs index d5c107b4ddc73c196086a83a8b852436e19140e6..d270790a3ba4458c7d273fd620fcb2ae98831e87 100644 --- a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs +++ b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs @@ -35,14 +35,16 @@ using System.IO; using System.Linq; using NUnit.Framework; using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.InputData.FileIO.JSON; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter; +using TUGraz.VectoCore.InputData.Reader.Impl; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Tests.Utils; using TUGraz.VectoCore.Utils; -using CrossWindCorrectionMode = TUGraz.VectoCommon.Models.CrossWindCorrectionMode; namespace TUGraz.VectoCore.Tests.Models.Declaration { @@ -144,7 +146,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration Assert.AreEqual(expected, lookup, 1e-8); } - [Test] + [TestCase] public void WHTCLookupTestRegionalDelivery() { var expected = 1.02708700; @@ -675,10 +677,10 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration { Assert.AreEqual(missionType, m.MissionType); Assert.AreEqual(cosswindCorrection, m.CrossWindCorrection); - Assert.IsTrue(axleWeightDistribution.SequenceEqual(m.AxleWeightDistribution), + CollectionAssert.AreEqual(axleWeightDistribution, m.AxleWeightDistribution, "Axle distribution not equal.\nexpected: {0}\nactual: {1}", string.Join(",", axleWeightDistribution), string.Join(",", m.AxleWeightDistribution)); - Assert.IsTrue(trailerAxleWeightDistribution.SequenceEqual(m.TrailerAxleWeightDistribution), + CollectionAssert.AreEqual(trailerAxleWeightDistribution, m.TrailerAxleWeightDistribution, "Trailer axle distribution not equal.\nexpected: {0}\nactual: {1}", string.Join(",", trailerAxleWeightDistribution), string.Join(",", m.TrailerAxleWeightDistribution)); Assert.AreEqual(bodyCurbWeight.SI<Kilogram>(), m.BodyCurbWeight); @@ -725,5 +727,71 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration EqualAcceleration(data, -20, 1, -1); EqualAcceleration(data, 140, 0.5, -0.5); } + + [TestCase] + public void Declaration_WheelsForT1_Class2() + { + var dataProvider = + JSONInputDataFactory.ReadJsonJob(@"TestData\Jobs\12t Delivery Truck.vecto") as IDeclarationInputDataProvider; + var dataReader = new DeclarationModeVectoRunDataFactory(dataProvider, null); + + var runs = dataReader.NextRun().ToList(); + Assert.AreEqual(9, runs.Count); + var withT1 = new[] { 6.0, 6.0, 4.5 }; + CollectionAssert.AreEqual(withT1, runs[0].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(withT1, runs[1].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(withT1, runs[2].VehicleData.AxleData.Select(a => a.Inertia.Value())); + + var bodyOnly = new[] { 6.0, 6.0 }; + CollectionAssert.AreEqual(bodyOnly, runs[3].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(bodyOnly, runs[4].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(bodyOnly, runs[5].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(bodyOnly, runs[6].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(bodyOnly, runs[7].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(bodyOnly, runs[8].VehicleData.AxleData.Select(a => a.Inertia.Value())); + } + + [TestCase] + public void Declaration_WheelsForT2_Class4() + { + var dataProvider = + JSONInputDataFactory.ReadJsonJob(@"TestData\Jobs\Class4_40t_Long_Haul_Truck.vecto") as IDeclarationInputDataProvider; + var dataReader = new DeclarationModeVectoRunDataFactory(dataProvider, null); + + var runs = dataReader.NextRun().ToList(); + Assert.AreEqual(9, runs.Count); + var withT1 = new[] { 14.9, 14.9, 19.2, 19.2 }; + CollectionAssert.AreEqual(withT1, runs[0].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(withT1, runs[1].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(withT1, runs[2].VehicleData.AxleData.Select(a => a.Inertia.Value())); + + var bodyOnly = new[] { 14.9, 14.9 }; + CollectionAssert.AreEqual(bodyOnly, runs[3].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(bodyOnly, runs[4].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(bodyOnly, runs[5].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(bodyOnly, runs[6].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(bodyOnly, runs[7].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(bodyOnly, runs[8].VehicleData.AxleData.Select(a => a.Inertia.Value())); + } + + [TestCase] + public void Declaration_WheelsForDefault_Class5() + { + var dataProvider = + JSONInputDataFactory.ReadJsonJob(@"TestData\Jobs\40t_Long_Haul_Truck.vecto") as IDeclarationInputDataProvider; + var dataReader = new DeclarationModeVectoRunDataFactory(dataProvider, null); + + var runs = dataReader.NextRun().ToList(); + Assert.AreEqual(6, runs.Count); + var withT1 = new[] { 14.9, 14.9, 19.2, 19.2, 19.2 }; + CollectionAssert.AreEqual(withT1, runs[0].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(withT1, runs[1].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(withT1, runs[2].VehicleData.AxleData.Select(a => a.Inertia.Value())); + + var bodyOnly = new[] { 14.9, 14.9, 19.2, 19.2, 19.2 }; + CollectionAssert.AreEqual(bodyOnly, runs[3].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(bodyOnly, runs[4].VehicleData.AxleData.Select(a => a.Inertia.Value())); + CollectionAssert.AreEqual(bodyOnly, runs[5].VehicleData.AxleData.Select(a => a.Inertia.Value())); + } } } \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Components/Class4_40t_Long_Haul_Truck.vveh b/VectoCore/VectoCoreTest/TestData/Components/Class4_40t_Long_Haul_Truck.vveh new file mode 100644 index 0000000000000000000000000000000000000000..51ab56edcf2db8b19829f7cc1ab5b3bf5626687f --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Components/Class4_40t_Long_Haul_Truck.vveh @@ -0,0 +1,47 @@ +{ + "Header": { + "CreatedBy": "Raphael Luz IVT TU-Graz (85407225-fc3f-48a8-acda-c84a05df6837)", + "Date": "29.07.2014 16:59:03", + "AppVersion": "2.0.4-beta", + "FileVersion": 7 + }, + "Body": { + "SavedInDeclMode": true, + "VehCat": "RigidTruck", + "CurbWeight": 7100.0, + "CurbWeightExtra": 0.0, + "Loading": 0.0, + "MassMax": 40.0, + "CdA": 6.2985, + "rdyn": 488.2675, + "Rim": "5° DC Rims", + "CdCorrMode": "CdofVdecl", + "CdCorrFile": "40t_Long_Haul_Truck.vcdv", + "Retarder": { + "Type": "Secondary", + "Ratio": 1.0, + "File": "Retarder.vrlm" + }, + "AxleConfig": { + "Type": "4x2", + "Axles": [ + { + "Inertia": 14.9, + "Wheels": "315/70 R22.5", + "AxleWeightShare": 0.5, + "TwinTyres": false, + "RRCISO": 0.00555, + "FzISO": 31300.0 + }, + { + "Inertia": 14.9, + "Wheels": "315/70 R22.5", + "AxleWeightShare": 0.5, + "TwinTyres": true, + "RRCISO": 0.00628, + "FzISO": 31300.0 + } + ] + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Jobs/Class4_40t_Long_Haul_Truck.vecto b/VectoCore/VectoCoreTest/TestData/Jobs/Class4_40t_Long_Haul_Truck.vecto new file mode 100644 index 0000000000000000000000000000000000000000..323213d04d8ae04b648b1011c3fffbe72fef4c26 --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Jobs/Class4_40t_Long_Haul_Truck.vecto @@ -0,0 +1,70 @@ +{ + "Header": { + "CreatedBy": "Raphael Luz IVT TU-Graz (85407225-fc3f-48a8-acda-c84a05df6837)", + "Date": "29.07.2014 16:59:08", + "AppVersion": "2.0.4-beta", + "FileVersion": 2 + }, + "Body": { + "SavedInDeclMode": true, + "VehicleFile": "../Components/Class4_40t_Long_Haul_Truck.vveh", + "EngineFile": "../Components/40t_Long_Haul_Truck.veng", + "GearboxFile": "../Components/40t_Long_Haul_Truck.vgbx", + "Cycles": [ + "Long Haul", + "Regional Delivery" + ], + "Aux": [ + { + "ID": "FAN", + "Type": "Fan", + "Path": "<NOFILE>", + "Technology": "Hydraulic driven - Constant displacement pump" + }, + { + "ID": "STP", + "Type": "Steering pump", + "Path": "<NOFILE>", + "Technology": "Variable displacement" + }, + { + "ID": "AC", + "Type": "HVAC", + "Path": "<NOFILE>", + "Technology": "Default" + }, + { + "ID": "ES", + "Type": "Electric System", + "Path": "<NOFILE>", + "Technology": "Custom Technology List", + "TechList": [] + }, + { + "ID": "PS", + "Type": "Pneumatic System", + "Path": "<NOFILE>", + "Technology": "Default" + } + ], + "VACC": "<NOFILE>", + "EngineOnlyMode": false, + "StartStop": { + "Enabled": false, + "MaxSpeed": 5.0, + "MinTime": 5.0, + "Delay": 5 + }, + "LAC": { + "Enabled": true, + "Dec": -0.5, + "MinSpeed": 50.0 + }, + "OverSpeedEcoRoll": { + "Mode": "OverSpeed", + "MinSpeed": 50.0, + "OverSpeed": 5.0, + "UnderSpeed": 5.0 + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/Utils/ResultFileHelper.cs b/VectoCore/VectoCoreTest/Utils/ResultFileHelper.cs index 442b3c699c1ba295e41f51ea62a7098393e966c4..1a3443823a656a5a61351790a25560f8ec6acc85 100644 --- a/VectoCore/VectoCoreTest/Utils/ResultFileHelper.cs +++ b/VectoCore/VectoCoreTest/Utils/ResultFileHelper.cs @@ -91,7 +91,7 @@ namespace TUGraz.VectoCore.Tests.Utils .ToList(); } - Assert.IsTrue(expectedCols.SequenceEqual(actualCols), + CollectionAssert.AreEqual(expectedCols, actualCols, string.Format("Moddata {3}: Columns differ:\nExpected: {0}\nMissing:{1},\nToo Much:{2}", ", ".Join(expectedCols), ", ".Join(expectedCols.Except(actualCols)), @@ -123,7 +123,7 @@ namespace TUGraz.VectoCore.Tests.Utils var actualCols = actual.Columns.Cast<DataColumn>().Select(x => x.ColumnName).OrderBy(x => x).ToList(); var expectedCols = expected.Columns.Cast<DataColumn>().Select(x => x.ColumnName).OrderBy(x => x).ToList(); - Assert.IsTrue(expectedCols.SequenceEqual(actualCols), + CollectionAssert.AreEqual(expectedCols, actualCols, string.Format("SUM FILE {3}: Columns differ:\nExpected: {0}\nMissing:{1},\nToo Much:{2}", ", ".Join(expectedCols), ", ".Join(expectedCols.Except(actualCols)), diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index abde5e81331a5a0373c2b7626fc919dcee64daa6..1c810bde42ea4da92cc5fed57d4195b342883011 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -214,6 +214,9 @@ <None Include="TestData\Components\40t_Long_Haul_Truck_NoAng.vveh"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Components\Class4_40t_Long_Haul_Truck.vveh"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Components\40t_Long_Haul_Truck AxleEfficiency.vgbx"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> @@ -960,6 +963,9 @@ <None Include="TestData\Jobs\40t_Long_Haul_Truck_NoAng.vecto"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Jobs\Class4_40t_Long_Haul_Truck.vecto"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Jobs\40t_Long_Haul_Truck with AxleEfficiency.vecto"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None>