Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 8f1009ee authored by Michael KRISPER's avatar Michael KRISPER
Browse files

Segment Table: Added DesignSpeed, Added Test for Design Speed

parent 76c6bdc3
No related branches found
No related tags found
No related merge requests found
......@@ -55,6 +55,8 @@ namespace TUGraz.VectoCore.Models.Declaration
public Meter VehicleHeight { get; internal set; }
public MeterPerSecond DesignSpeed { get; internal set; }
public SquareMeter CdAConstruction { get; internal set; }
}
}
\ No newline at end of file
......@@ -46,7 +46,6 @@ namespace TUGraz.VectoCore.Models.Declaration
{
private DataTable _segmentTable;
protected override string ResourceId
{
get { return DeclarationData.DeclarationDataResourcePrefix + ".SegmentTable.csv"; }
......@@ -54,7 +53,8 @@ namespace TUGraz.VectoCore.Models.Declaration
protected override string ErrorMessage
{
get {
get
{
return
"ERROR: Could not find the declaration segment for vehicle. Category: {0}, AxleConfiguration: {1}, GrossVehicleWeight: {2}";
}
......@@ -89,13 +89,14 @@ namespace TUGraz.VectoCore.Models.Declaration
return (considerInvalid || isValid == "1")
&& category == vehicleCategory.ToString()
&& axleConf == axleConfiguration.GetName()
// MK 2016-06-07: normally the next condition should be "mass > massMin", except for 7.5t where is should be ">="
// in any case ">=" is also correct, because the segment table is sorted by weight.
// MK 2016-06-07: normally the next condition should be "mass > massMin", except for 7.5t where is should be ">="
// in any case ">=" is also correct, because the segment table is sorted by weight.
&& grossVehicleMassRating >= massMin
&& grossVehicleMassRating <= massMax;
});
} catch (InvalidOperationException e) {
var errorMessage = string.Format(ErrorMessage, vehicleCategory, axleConfiguration.GetName(), grossVehicleMassRating);
var errorMessage = string.Format(ErrorMessage, vehicleCategory, axleConfiguration.GetName(),
grossVehicleMassRating);
Log.Fatal(errorMessage);
throw new VectoException(errorMessage, e);
}
......@@ -110,6 +111,7 @@ namespace TUGraz.VectoCore.Models.Declaration
row.Field<string>(".vaccfile")),
Missions = CreateMissions(ref grossVehicleMassRating, curbWeight, row),
VehicleHeight = row.ParseDouble("height").SI<Meter>(),
DesignSpeed = row.ParseDouble("designspeed").KMPHtoMeterPerSecond(),
GrossVehicleMassRating = grossVehicleMassRating,
CdAConstruction =
string.IsNullOrEmpty(row["cdxa_construction"].ToString())
......@@ -164,7 +166,8 @@ namespace TUGraz.VectoCore.Models.Declaration
throw new VectoException(
"Error in segmentation table: number of trailers and list of weight shares does not match!");
}
trailers.AddRange(trailerWeightShares.Select((t, i) => CreateTrailer(trailerList[i], t.ToDouble() / 100.0, i == 0)));
trailers.AddRange(
trailerWeightShares.Select((t, i) => CreateTrailer(trailerList[i], t.ToDouble() / 100.0, i == 0)));
} else {
if (ShouldTrailerBeUsed(row, missionType)) {
var trailerValue = row.Field<string>("trailer");
......@@ -175,7 +178,6 @@ namespace TUGraz.VectoCore.Models.Declaration
}
}
//var semiTrailerField = row.Field<string>("semitrailer");
//var semiTrailer = !string.IsNullOrWhiteSpace(semiTrailerField)
// ? DeclarationData.StandardBodies.Lookup(semiTrailerField)
......
......@@ -419,9 +419,11 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
null,
null),
TestCase(MissionType.RegionalDelivery, VehicleClass.Class2, 289, "Dual displacement", null, null, null),
TestCase(MissionType.RegionalDelivery, VehicleClass.Class2, 255, "Variable displacement mech. controlled", null, null,
TestCase(MissionType.RegionalDelivery, VehicleClass.Class2, 255, "Variable displacement mech. controlled", null,
null,
null),
TestCase(MissionType.RegionalDelivery, VehicleClass.Class2, 204, "Variable displacement elec. controlled", null, null,
TestCase(MissionType.RegionalDelivery, VehicleClass.Class2, 204, "Variable displacement elec. controlled", null,
null,
null),
TestCase(MissionType.RegionalDelivery, VehicleClass.Class2, 92.8571, "Electric", null, null, null),
TestCase(MissionType.RegionalDelivery, VehicleClass.Class2, 665, "Fixed displacement", "Fixed displacement", null,
......@@ -465,11 +467,11 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
public void SegmentWeightOutOfRange4X2(double weight)
{
AssertHelper.Exception<VectoException>(() =>
DeclarationData.Segments.Lookup(
VehicleCategory.RigidTruck,
AxleConfiguration.AxleConfig_4x2,
weight.SI<Kilogram>(),
0.SI<Kilogram>()),
DeclarationData.Segments.Lookup(
VehicleCategory.RigidTruck,
AxleConfiguration.AxleConfig_4x2,
weight.SI<Kilogram>(),
0.SI<Kilogram>()),
"Gross vehicle mass must be greater than 7.5 tons");
}
......@@ -482,11 +484,11 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
public void SegmentWeightOutOfRange4X4(double weight)
{
AssertHelper.Exception<VectoException>(() =>
DeclarationData.Segments.Lookup(
VehicleCategory.RigidTruck,
AxleConfiguration.AxleConfig_4x4,
weight.SI<Kilogram>(),
0.SI<Kilogram>()),
DeclarationData.Segments.Lookup(
VehicleCategory.RigidTruck,
AxleConfiguration.AxleConfig_4x4,
weight.SI<Kilogram>(),
0.SI<Kilogram>()),
"Gross vehicle mass must be greater than 7.5 tons");
}
......@@ -530,6 +532,26 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
Assert.AreEqual(expectedClass, segment.VehicleClass);
}
[TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 7500, 0, VehicleClass.Class1, 85),
TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 10001, 0, VehicleClass.Class2, 85),
TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 12001, 0, VehicleClass.Class3, 85),
TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 16001, 0, VehicleClass.Class4, 85),
TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_4x2, 16001, 0, VehicleClass.Class5, 85),
TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_6x2, 7500, 0, VehicleClass.Class9, 85),
TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x2, 7500, 0, VehicleClass.Class10, 85),
TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_6x4, 7500, 0, VehicleClass.Class11, 85),
TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x4, 7500, 0, VehicleClass.Class12, 85),
TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_8x4, 7500, 0, VehicleClass.Class16, 85),
]
public void SegmentDesignSpeedTest(VehicleCategory category, AxleConfiguration axleConfiguration, double grossWeight,
double curbWeight, VehicleClass expectedClass, double speed)
{
var segment = DeclarationData.Segments.Lookup(category, axleConfiguration, grossWeight.SI<Kilogram>(),
curbWeight.SI<Kilogram>());
Assert.AreEqual(speed.KMPHtoMeterPerSecond(), segment.DesignSpeed);
}
[Test,
TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_4x2, 10000, 0, VehicleClass.Class1, 1600, null,
TestName = "SegmentLookupBodyWeight Class1 Rigid"),
......@@ -784,7 +806,6 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
refLoad: 17500, trailerGrossVehicleWeight: new[] { 24000.0, 18000 }, deltaCdA: 0.6, maxLoad: 39600, ems: true);
}
/// <summary>
/// Segment 9: fixed reference weight, trailer always used
/// </summary>
......@@ -1117,7 +1138,8 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
public void Declaration_WheelsForT2_Class4()
{
var dataProvider =
JSONInputDataFactory.ReadJsonJob(@"TestData\Jobs\Class4_40t_Long_Haul_Truck.vecto") as IDeclarationInputDataProvider;
JSONInputDataFactory.ReadJsonJob(
@"TestData\Jobs\Class4_40t_Long_Haul_Truck.vecto") as IDeclarationInputDataProvider;
var dataReader = new DeclarationModeVectoRunDataFactory(dataProvider, null);
var runs = dataReader.NextRun().ToList();
......
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