From 90b87ebe8efe55e88139535cf1182c5bf2be8377 Mon Sep 17 00:00:00 2001 From: Michael Krisper <michael.krisper@tugraz.at> Date: Tue, 5 Jul 2016 16:20:06 +0200 Subject: [PATCH] added tests for Segment 2, Segment 3, Segment 4 and Segment 5 Vehicles in Declaration Mode --- .../Models/Declaration/DeclarationDataTest.cs | 207 ++++++++++++------ 1 file changed, 145 insertions(+), 62 deletions(-) diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs index 4204d44a9d..cff0c9e0ff 100644 --- a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs +++ b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs @@ -42,6 +42,7 @@ using TUGraz.VectoCore.InputData.Reader.DataObjectAdaper; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.Tests.Utils; +using TUGraz.VectoCore.Utils; using Assert = Microsoft.VisualStudio.TestTools.UnitTesting.Assert; using CrossWindCorrectionMode = TUGraz.VectoCommon.Models.CrossWindCorrectionMode; @@ -51,7 +52,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration public class DeclarationDataTest { public const double Tolerance = 0.0001; - public readonly MissionType[] Missions = Enum.GetValues(typeof(MissionType)).Cast<MissionType>().ToArray(); + public readonly MissionType[] Missions = EnumHelper.GetValues<MissionType>().ToArray(); [Test, TestCase("285/70 R19.5", 7.9, 0.8943, "b"), @@ -268,7 +269,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration TestCase(150, 0.5, 1.0, 0.0), TestCase(150, 12.0, 1.0, -18674.133), // = (12-4.4)*(-16540.98- -2462.17)/(11-4.4)+ -2462.17 ] - public void DefaultTCTest(double referenceRpm, double nu, double mu, double torque) + public void DefaultTcTest(double referenceRpm, double nu, double mu, double torque) { var referenceSpeed = referenceRpm.SI<PerSecond>(); @@ -332,6 +333,8 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration } [Test, + TestCase("", + new[] { 618, 671, 516, 566, 1037, 0, 0, 0, 0, 0 }), TestCase("Crankshaft mounted - Electronically controlled visco clutch (Default)", new[] { 618, 671, 516, 566, 1037, 0, 0, 0, 0, 0 }), TestCase("Crankshaft mounted - Bimetallic controlled visco clutch", new[] { 818, 871, 676, 766, 1277, 0, 0, 0, 0, 0 }), @@ -350,20 +353,9 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration ] public void AuxFanTechTest(string technology, int[] expected) { - var fan = DeclarationData.Fan; - - var defaultExpected = new[] { 618, 671, 516, 566, 1037, 0, 0, 0, 0, 0 }; - for (var i = 0; i < Missions.Length; i++) { - // default tech - var defaultValue = fan.Lookup(Missions[i], ""); - Assert.AreEqual(defaultExpected[i], defaultValue.Value(), Tolerance); - - // all fan techs - foreach (var expect in expected) { - var value = fan.Lookup(Missions[i], technology); - Assert.AreEqual(expected[i], value.Value(), Tolerance); - } + var value = DeclarationData.Fan.Lookup(Missions[i], technology); + Assert.AreEqual(expected[i], value.Value(), Tolerance); } } @@ -529,10 +521,12 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration Assert.AreEqual(expectedClass, segment.VehicleClass); } - [Test] - public void SegmentTest() + /// <summary> + /// trailer in longhaul, always pc formula + /// </summary> + [TestCase] + public void Segment2Test() { - //mock vehicleData var vehicleData = new { VehicleCategory = VehicleCategory.RigidTruck, AxleConfiguration = AxleConfiguration.AxleConfig_4x2, @@ -550,64 +544,153 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration Assert.AreEqual(3, segment.Missions.Length); - var longHaulMission = segment.Missions[0]; - Assert.AreEqual(MissionType.LongHaul, longHaulMission.MissionType); + AssertMission(segment.Missions[0], vehicleData: vehicleData, missionType: MissionType.LongHaul, + cosswindCorrection: "RigidTrailer", axleWeightDistribution: new[] { 0.225, 0.325 }, + trailerAxleWeightDistribution: new[] { 0.45 }, bodyCurbWeight: 1900, trailerCurbWeight: 3400, + trailerType: TrailerType.T1, minLoad: 0, refLoad: 9813.2353, trailerGrossVehicleWeight: 10500, deltaCdA: 1.1); + + AssertMission(segment.Missions[1], vehicleData: vehicleData, missionType: MissionType.RegionalDelivery, + cosswindCorrection: "RigidSolo", axleWeightDistribution: new[] { 0.45, 0.55 }, + trailerAxleWeightDistribution: new double[] { }, bodyCurbWeight: 1900, trailerCurbWeight: 0, + trailerType: TrailerType.None, minLoad: 0, refLoad: 2984.1176, trailerGrossVehicleWeight: 0, deltaCdA: 0); + + AssertMission(segment.Missions[2], vehicleData: vehicleData, missionType: MissionType.UrbanDelivery, + cosswindCorrection: "RigidSolo", axleWeightDistribution: new[] { 0.45, 0.55 }, + trailerAxleWeightDistribution: new double[] { }, bodyCurbWeight: 1900, trailerCurbWeight: 0, + trailerType: TrailerType.None, minLoad: 0, refLoad: 2984.1176, trailerGrossVehicleWeight: 0, deltaCdA: 0); + } + + /// <summary> + /// normal pc formula, no trailer + /// </summary> + [TestCase] + public void Segment3Test() + { + var vehicleData = new { + VehicleCategory = VehicleCategory.RigidTruck, + AxleConfiguration = AxleConfiguration.AxleConfig_4x2, + GrossVehicleMassRating = 14000.SI<Kilogram>(), + CurbWeight = 5850.SI<Kilogram>() + }; + + var segment = DeclarationData.Segments.Lookup(vehicleData.VehicleCategory, vehicleData.AxleConfiguration, + vehicleData.GrossVehicleMassRating, vehicleData.CurbWeight); + + Assert.AreEqual(VehicleClass.Class3, segment.VehicleClass); + + Assert.AreEqual(2, segment.Missions.Length); + + AssertMission(segment.Missions[0], vehicleData: vehicleData, missionType: MissionType.RegionalDelivery, + cosswindCorrection: "RigidSolo", axleWeightDistribution: new[] { 0.4, 0.6 }, + trailerAxleWeightDistribution: new double[] { }, bodyCurbWeight: 2000, trailerCurbWeight: 0, + trailerType: TrailerType.None, minLoad: 0, refLoad: 3811.7647, trailerGrossVehicleWeight: 0, deltaCdA: 0); + + AssertMission(segment.Missions[1], vehicleData: vehicleData, missionType: MissionType.UrbanDelivery, + cosswindCorrection: "RigidSolo", axleWeightDistribution: new[] { 0.4, 0.6 }, + trailerAxleWeightDistribution: new double[] { }, bodyCurbWeight: 2000, trailerCurbWeight: 0, + trailerType: TrailerType.None, minLoad: 0, refLoad: 3811.7647, trailerGrossVehicleWeight: 0, deltaCdA: 0); + } + + /// <summary> + /// fixed reference weight, trailer only in longhaul + /// </summary> + [TestCase] + public void Segment4Test() + { + var vehicleData = new { + VehicleCategory = VehicleCategory.RigidTruck, + AxleConfiguration = AxleConfiguration.AxleConfig_4x2, + GrossVehicleMassRating = 40000.SI<Kilogram>(), + CurbWeight = 5850.SI<Kilogram>() + }; - Assert.AreEqual("RigidTrailer", longHaulMission.CrossWindCorrection); + var segment = DeclarationData.Segments.Lookup(vehicleData.VehicleCategory, vehicleData.AxleConfiguration, + vehicleData.GrossVehicleMassRating, vehicleData.CurbWeight); + + Assert.AreEqual(VehicleClass.Class4, segment.VehicleClass); - Assert.IsTrue(new[] { 0.225, 0.325 }.SequenceEqual(longHaulMission.AxleWeightDistribution)); - Assert.IsTrue(new double[] { 0.45 }.SequenceEqual(longHaulMission.TrailerAxleWeightDistribution)); - Assert.AreEqual(1900.SI<Kilogram>(), longHaulMission.BodyCurbWeight); - Assert.AreEqual(3400.SI<Kilogram>(), longHaulMission.TrailerCurbWeight); - Assert.AreEqual(TrailerType.T1, longHaulMission.TrailerType); + var data = AccelerationCurveData.ReadFromStream(segment.AccelerationFile); + TestAcceleration(data); - Assert.IsNotNull(longHaulMission.CycleFile); - Assert.IsTrue(!string.IsNullOrEmpty(new StreamReader(longHaulMission.CycleFile).ReadLine())); + Assert.AreEqual(3, segment.Missions.Length); - Assert.AreEqual(0.SI<Kilogram>(), longHaulMission.MinLoad); - AssertHelper.AreRelativeEqual(9813.2353, longHaulMission.RefLoad); - Assert.AreEqual(10500.SI<Kilogram>(), longHaulMission.TrailerGrossVehicleWeight); - Assert.AreEqual(vehicleData.GrossVehicleMassRating + longHaulMission.TrailerGrossVehicleWeight - - longHaulMission.BodyCurbWeight - longHaulMission.TrailerCurbWeight - vehicleData.CurbWeight, - longHaulMission.MaxLoad); + AssertMission(segment.Missions[0], vehicleData: vehicleData, missionType: MissionType.LongHaul, + cosswindCorrection: "RigidTrailer", axleWeightDistribution: new[] { 0.2, 0.3 }, + trailerAxleWeightDistribution: new[] { 0.25, 0.25 }, bodyCurbWeight: 2100, trailerCurbWeight: 5400, + trailerType: TrailerType.T2, minLoad: 0, refLoad: 14000, trailerGrossVehicleWeight: 18000, deltaCdA: 0.6); - var regionalDeliveryMission = segment.Missions[1]; - Assert.AreEqual(MissionType.RegionalDelivery, regionalDeliveryMission.MissionType); + AssertMission(segment.Missions[1], vehicleData: vehicleData, missionType: MissionType.RegionalDelivery, + cosswindCorrection: "RigidSolo", axleWeightDistribution: new[] { 0.45, 0.55 }, + trailerAxleWeightDistribution: new double[] { }, bodyCurbWeight: 2100, trailerCurbWeight: 0, + trailerType: TrailerType.None, minLoad: 0, refLoad: 4400, trailerGrossVehicleWeight: 0, deltaCdA: 0); - Assert.AreEqual("RigidSolo", regionalDeliveryMission.CrossWindCorrection); + AssertMission(segment.Missions[2], vehicleData: vehicleData, missionType: MissionType.MunicipalUtility, + cosswindCorrection: "RigidSolo", axleWeightDistribution: new[] { 0.45, 0.55 }, + trailerAxleWeightDistribution: new double[] { }, bodyCurbWeight: 2100, trailerCurbWeight: 0, + trailerType: TrailerType.None, minLoad: 0, refLoad: 4400, trailerGrossVehicleWeight: 0, deltaCdA: 0); + } - Assert.IsTrue(new[] { 0.45, 0.55 }.SequenceEqual(regionalDeliveryMission.AxleWeightDistribution)); - Assert.IsTrue(new double[] { }.SequenceEqual(regionalDeliveryMission.TrailerAxleWeightDistribution)); - Assert.AreEqual(1900.SI<Kilogram>(), regionalDeliveryMission.BodyCurbWeight); - Assert.AreEqual(0.SI<Kilogram>(), regionalDeliveryMission.TrailerCurbWeight); - Assert.AreEqual(TrailerType.None, regionalDeliveryMission.TrailerType); + /// <summary> + /// Segment 5: fixed reference weight, trailer always used + /// </summary> + [TestCase] + public void Segment5Test() + { + var vehicleData = new { + VehicleCategory = VehicleCategory.Tractor, + AxleConfiguration = AxleConfiguration.AxleConfig_4x2, + GrossVehicleMassRating = 40000.SI<Kilogram>(), + CurbWeight = 5850.SI<Kilogram>() + }; - Assert.IsNotNull(regionalDeliveryMission.CycleFile); - Assert.IsTrue(!string.IsNullOrEmpty(new StreamReader(regionalDeliveryMission.CycleFile).ReadLine())); + var segment = DeclarationData.Segments.Lookup(vehicleData.VehicleCategory, vehicleData.AxleConfiguration, + vehicleData.GrossVehicleMassRating, vehicleData.CurbWeight); - Assert.AreEqual(0.SI<Kilogram>(), regionalDeliveryMission.MinLoad); - AssertHelper.AreRelativeEqual(2984.1176, regionalDeliveryMission.RefLoad); - Assert.AreEqual(vehicleData.GrossVehicleMassRating - regionalDeliveryMission.BodyCurbWeight - vehicleData.CurbWeight, - regionalDeliveryMission.MaxLoad); + Assert.AreEqual(VehicleClass.Class5, segment.VehicleClass); - var urbanDeliveryMission = segment.Missions[2]; - Assert.AreEqual(MissionType.UrbanDelivery, urbanDeliveryMission.MissionType); + var data = AccelerationCurveData.ReadFromStream(segment.AccelerationFile); + TestAcceleration(data); - Assert.AreEqual("RigidSolo", urbanDeliveryMission.CrossWindCorrection); + Assert.AreEqual(2, segment.Missions.Length); - Assert.IsTrue(new[] { 0.45, 0.55 }.SequenceEqual(urbanDeliveryMission.AxleWeightDistribution)); - Assert.IsTrue(new double[] { }.SequenceEqual(urbanDeliveryMission.TrailerAxleWeightDistribution)); - Assert.AreEqual(1900.SI<Kilogram>(), urbanDeliveryMission.BodyCurbWeight); - Assert.AreEqual(0.SI<Kilogram>(), urbanDeliveryMission.TrailerCurbWeight); - Assert.AreEqual(TrailerType.None, urbanDeliveryMission.TrailerType); + AssertMission(segment.Missions[0], vehicleData: vehicleData, missionType: MissionType.LongHaul, + cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.2, 0.25 }, + trailerAxleWeightDistribution: (0.55 / 3).Repeat(3).ToArray(), bodyCurbWeight: 0, trailerCurbWeight: 7500, + trailerType: TrailerType.None, minLoad: 0, refLoad: 19300, trailerGrossVehicleWeight: 0, deltaCdA: 0); - Assert.IsNotNull(urbanDeliveryMission.CycleFile); - Assert.IsTrue(!string.IsNullOrEmpty(new StreamReader(urbanDeliveryMission.CycleFile).ReadLine())); + AssertMission(segment.Missions[1], vehicleData: vehicleData, missionType: MissionType.RegionalDelivery, + cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.25, 0.25 }, + trailerAxleWeightDistribution: (0.5 / 3).Repeat(3).ToArray(), bodyCurbWeight: 0, trailerCurbWeight: 7500, + trailerType: TrailerType.None, minLoad: 0, refLoad: 12900, trailerGrossVehicleWeight: 0, deltaCdA: 0); + } - Assert.AreEqual(0.SI<Kilogram>(), urbanDeliveryMission.MinLoad); - AssertHelper.AreRelativeEqual(2984.1176.SI<Kilogram>(), urbanDeliveryMission.RefLoad); - Assert.AreEqual(vehicleData.GrossVehicleMassRating - urbanDeliveryMission.BodyCurbWeight - vehicleData.CurbWeight, - urbanDeliveryMission.MaxLoad); + [Test] + public static void AssertMission(Mission m, dynamic vehicleData, MissionType missionType, string cosswindCorrection, + double[] axleWeightDistribution, double[] trailerAxleWeightDistribution, double bodyCurbWeight, + double trailerCurbWeight, TrailerType trailerType, double minLoad, double refLoad, double trailerGrossVehicleWeight, + double deltaCdA) + { + Assert.AreEqual(missionType, m.MissionType); + Assert.AreEqual(cosswindCorrection, m.CrossWindCorrection); + Assert.IsTrue(axleWeightDistribution.SequenceEqual(m.AxleWeightDistribution), + "Axle distribution not equal.\nexpected: {0}\nactual: {1}", string.Join(",", axleWeightDistribution), + string.Join(",", m.AxleWeightDistribution)); + Assert.IsTrue(trailerAxleWeightDistribution.SequenceEqual(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); + Assert.AreEqual(trailerCurbWeight.SI<Kilogram>(), m.TrailerCurbWeight); + Assert.AreEqual(trailerType, m.TrailerType); + + Assert.IsNotNull(m.CycleFile); + Assert.IsTrue(!string.IsNullOrEmpty(new StreamReader(m.CycleFile).ReadLine())); + Assert.AreEqual(minLoad.SI<Kilogram>(), m.MinLoad); + AssertHelper.AreRelativeEqual(refLoad, m.RefLoad); + Assert.AreEqual(trailerGrossVehicleWeight.SI<Kilogram>(), m.TrailerGrossVehicleWeight); + Assert.AreEqual(VectoMath.Min(vehicleData.GrossVehicleMassRating + m.TrailerGrossVehicleWeight, 40000.SI<Kilogram>()) + - m.BodyCurbWeight - m.TrailerCurbWeight - vehicleData.CurbWeight, + m.MaxLoad); + Assert.AreEqual(deltaCdA.SI<SquareMeter>(), m.DeltaCdA); } public void EqualAcceleration(AccelerationCurveData data, double velocity, double acceleration, -- GitLab