diff --git a/VECTO/Input Files/Engine.vb b/VECTO/Input Files/Engine.vb index 1772a3ab98b6f984cf034164ec863a3f684e28dc..06a41acb0793a0ab27999618450386f3f8bb5327 100644 --- a/VECTO/Input Files/Engine.vb +++ b/VECTO/Input Files/Engine.vb @@ -228,7 +228,8 @@ Public Class Engine Else Dim doa As EngineeringDataAdapter = New EngineeringDataAdapter() Dim dummyVehicle As IVehicleEngineeringInputData = New DummyVehicle() With { - .IVehicleComponentsEngineering_EngineInputData = engine + .IVehicleComponentsEngineering_EngineInputData = engine, + .TankSystem = TankSystem.Compressed } engineData = doa.CreateEngineData(dummyVehicle, CType(engine.EngineModes.First(), IEngineModeEngineeringInputData)) End If diff --git a/VectoCommon/VectoCommon/Models/HybridStrategyResponse.cs b/VectoCommon/VectoCommon/Models/HybridStrategyResponse.cs index 6d096712c9fa353ed0be8077fa3d5da6c806eb94..6998d172512dec4103cb78a6e95051667a0d9a24 100644 --- a/VectoCommon/VectoCommon/Models/HybridStrategyResponse.cs +++ b/VectoCommon/VectoCommon/Models/HybridStrategyResponse.cs @@ -84,9 +84,8 @@ namespace TUGraz.VectoCommon.Models { return ToString().Equals(other.ToString(), StringComparison.InvariantCultureIgnoreCase); } - public override string ToString() - { - var setting = string.Join(", ", Setting.MechanicalAssistPower.Select(x => $"{x.Key}, {x.Value}")); + public override string ToString() { + var setting = Setting.MechanicalAssistPower.Select(x => $"{x.Key}, {x.Value}").Join(); return $"{U}: {setting} {Score} G{Gear}"; } } @@ -157,7 +156,7 @@ namespace TUGraz.VectoCommon.Models { } } - return string.Join("/", retVal); + return retVal.Join("/"); } public static bool InvalidEngineSpeed(this HybridConfigurationIgnoreReason x) diff --git a/VectoCommon/VectoCommon/Models/IResponse.cs b/VectoCommon/VectoCommon/Models/IResponse.cs index ad0e0d1d5dafd24c4492303d86cc9d0f3dab5e0c..d3e3e6e18b0d918e89c6f704b9ccbe1f053e9e0a 100644 --- a/VectoCommon/VectoCommon/Models/IResponse.cs +++ b/VectoCommon/VectoCommon/Models/IResponse.cs @@ -44,7 +44,7 @@ namespace TUGraz.VectoCommon.Models public override string ToString() { var t = GetType(); - return $"{t.Name}{{{string.Join(", ", t.GetProperties().Select(p => $"{p.Name}: {p.GetValue(this)}"))}}}"; + return $"{t.Name}{{{t.GetProperties().Select(p => $"{p.Name}: {p.GetValue(this)}").Join()}}}"; } } diff --git a/VectoCommon/VectoCommon/Models/WHRType.cs b/VectoCommon/VectoCommon/Models/WHRType.cs index 9b4f8158cb633f0bccdc96dab1fc6505eecb4c49..b6f260f8c68cef31cf5450f6268b0aff893afc53 100644 --- a/VectoCommon/VectoCommon/Models/WHRType.cs +++ b/VectoCommon/VectoCommon/Models/WHRType.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using TUGraz.VectoCommon.Utils; namespace TUGraz.VectoCommon.Models { @@ -27,7 +28,7 @@ namespace TUGraz.VectoCommon.Models { options.Add("electrical output"); } - return options.Count == 0 ? "none" : string.Join(", ", options); + return options.Count == 0 ? "none" : options.Join(); } public static bool IsElectrical(this WHRType whrType) diff --git a/VectoCommon/VectoCommon/Utils/EnumerableExtensionMethods.cs b/VectoCommon/VectoCommon/Utils/EnumerableExtensionMethods.cs index 20e6d1aabbea4898c4e53c68f80fd21aff9fd094..b1b2f867acb503381a628c964014bff6dedd7016 100644 --- a/VectoCommon/VectoCommon/Utils/EnumerableExtensionMethods.cs +++ b/VectoCommon/VectoCommon/Utils/EnumerableExtensionMethods.cs @@ -39,6 +39,12 @@ namespace TUGraz.VectoCommon.Utils { public static class EnumerableExtensionMethods { + /// <summary> + /// Joins the items of the enumerable into a string. + /// </summary> + public static string Join<T>(this IEnumerable<T> list, string separator = ", ") => + string.Join(separator, list ?? Enumerable.Empty<T>()); + public static IEnumerable<(T value, int index)> Select<T>(this IEnumerable<T> self) => self.Select((value, index) => (value, index)); @@ -51,13 +57,6 @@ namespace TUGraz.VectoCommon.Utils return dest; } - /// <summary> - /// Joins the items of the enumerable into a string. - /// </summary> - public static string JoinString(this IEnumerable<string> self, string separator = ", ") => - string.Join(separator, self ?? Enumerable.Empty<string>()); - - public static IEnumerable<double> ToDouble(this IEnumerable<string> self, double? defaultValue = null) { return self.Select(s => s.ToDouble(defaultValue)); @@ -156,16 +155,16 @@ namespace TUGraz.VectoCommon.Utils } } - public static T Sum<T>(this IEnumerable<T> values) where T : SIBase<T> => + public static T Sum<T>(this IEnumerable<T> values) where T : SIBase<T> => values.Sum(x => x); public static TResult Sum<TU, TResult>(this IEnumerable<TU> values, Func<TU, TResult> selector) where TResult : SIBase<TResult> => values.Select(selector).DefaultIfEmpty().Aggregate((sum, current) => sum + current); - public static T Average<T>(this IEnumerable<T> values) where T : SIBase<T> => + public static T Average<T>(this IEnumerable<T> values) where T : SIBase<T> => values.Average(v => v.Value()).SI<T>(); - + /// <summary> /// Get the first two items where the predicate changes from true to false. /// If the predicate is always true, the last 2 elements are returned. diff --git a/VectoCommon/VectoCommon/Utils/SI.cs b/VectoCommon/VectoCommon/Utils/SI.cs index 7110bb757e55df107da4cce8580a291cd85a65a0..f41f07245d0052ded32fb5049fd9c23aa6649b60 100644 --- a/VectoCommon/VectoCommon/Utils/SI.cs +++ b/VectoCommon/VectoCommon/Utils/SI.cs @@ -1881,6 +1881,7 @@ namespace TUGraz.VectoCommon.Utils /// <param name="si">The si.</param> /// <param name="tolerance">The tolerance.</param> /// <returns></returns> + [DebuggerStepThrough] public bool IsSmallerOrEqual(SI si, SI tolerance = null) { if (!HasEqualUnit(si)) { diff --git a/VectoCommon/VectoCommon/Utils/Validation.cs b/VectoCommon/VectoCommon/Utils/Validation.cs index ebfe5f6b5d21df369c3ba563e091211e249aaae4..459464c82f3e244205c5aa11c0231682ccc1ce05 100644 --- a/VectoCommon/VectoCommon/Utils/Validation.cs +++ b/VectoCommon/VectoCommon/Utils/Validation.cs @@ -206,8 +206,7 @@ namespace TUGraz.VectoCommon.Utils if (kvResults.Any()) { return new ValidationResult( string.Format("{1}[{0}] in {1} invalid: {2}", valueType.GetProperty("Key").GetValue(element), - validationContext.DisplayName, - string.Join("\n", kvResults))); + validationContext.DisplayName, kvResults.Join("\n"))); } } } @@ -215,8 +214,7 @@ namespace TUGraz.VectoCommon.Utils var results = element.Validate(mode, jobType, emPos, gbxType, isEmsCycle); if (results.Any()) { return new ValidationResult( - string.Format("{1}[{0}] in {1} invalid: {2}", i, validationContext.DisplayName, - string.Join("\n", results))); + $"{validationContext.DisplayName}[{i}] in {validationContext.DisplayName} invalid: {results.Join("\n")}"); } } i++; @@ -226,12 +224,12 @@ namespace TUGraz.VectoCommon.Utils if (!results.Any()) { return ValidationResult.Success; } - var messages = results.Select(r => String.Join(", ", r.MemberNames.Distinct())); + var messages = results.Select(r => r.MemberNames.Distinct().Join()); if (validationContext.MemberName == "Container" || validationContext.MemberName == "RunData") { - return new ValidationResult(string.Join("\n", results), messages); + return new ValidationResult(results.Join("\n"), messages); } return new ValidationResult( - $"{{{validationContext.DisplayName}}} invalid: {string.Join("\n", results)}", messages); + $"{{{validationContext.DisplayName}}} invalid: {results.Join("\n")}", messages); } return ValidationResult.Success; diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLType.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLType.cs index 9d38cd19524c8f11fb0e9f269bca4ed9c60a2c97..a4c38f960ef474cdf54032b579a02c0b1a333960 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLType.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Common/AbstractXMLType.cs @@ -83,7 +83,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Common { var node = GetNode(nodePath, required: fallbackValue == null); if (node == null && fallbackValue == null) { - throw new VectoException("Node {0} not found in input data", string.Join("/", nodePath)); + throw new VectoException("Node {0} not found in input data", nodePath.Join("/")); } return node?.InnerText.ToDouble() ?? fallbackValue.Value; diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs index 933c79281c63f3b2dc2819ab5db2e336505ccffc..2fd94d18f454dedbceda1186f149dff795b03804 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationEngineDataProvider.cs @@ -110,7 +110,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public virtual FuelType FuelType { get { - var value = GetString(XMLNames.Engine_FuelType).Replace(" ",""); + var value = GetString(XMLNames.Engine_FuelType).Replace(" ", ""); if ("LPG".Equals(value, StringComparison.InvariantCultureIgnoreCase)) { return FuelType.LPGPI; } @@ -164,7 +164,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public XMLDeclarationEngineDataProviderV20( IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile) : base( - vehicle, componentNode, sourceFile) { } + vehicle, componentNode, sourceFile) + { } protected override XNamespace SchemaNamespace => NAMESPACE_URI; } @@ -336,13 +337,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider var missing = GetNodes( new[] { XMLNames.Engine_FuelConsumptionMap, XMLNames.Engine_FuelConsumptionMap_Entry }, whrFuelNode) .Cast<XmlNode>().Where(x => x.Attributes?[fcMapAttr] == null); - throw new VectoException( - "WHRData has to be provided for every entry in the FC-Map! {0}", - string.Join( - "; ", - missing.Select( - x => $"n: {x.Attributes?[XMLNames.Engine_FuelConsumptionMap_EngineSpeed_Attr]?.Value}, " + - $"T: {x.Attributes?[XMLNames.Engine_FuelConsumptionMap_Torque_Attr]?.Value}"))); + throw new VectoException("WHRData has to be provided for every entry in the FC-Map! {0}", + missing.Select(x => $"n: {x.Attributes?[XMLNames.Engine_FuelConsumptionMap_EngineSpeed_Attr]?.Value}, " + + $"T: {x.Attributes?[XMLNames.Engine_FuelConsumptionMap_Torque_Attr]?.Value}").Join("; ")); } if (correctionFactorNodes[0].ParentNode.ParentNode != whrFuelNode) { diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/AccelerationCurveReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/AccelerationCurveReader.cs index 3ffb4833610ebd675f36fe776bd89c3b8601aea3..3040a8b49aea54b2f575786d7acc2888976e4b6d 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/AccelerationCurveReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/AccelerationCurveReader.cs @@ -73,11 +73,12 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData if (HeaderIsValid(data.Columns)) { return CreateFromColumnNames(data); } - LoggingObject.Logger<AccelerationCurveData>() - .Warn("Acceleration Curve: Header Line is not valid. Expected: '{0}, {1}, {2}', Got: {3}", - Fields.Velocity, Fields.Acceleration, - Fields.Deceleration, - string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + LoggingObject.Logger<AccelerationCurveData>().Warn( + "Acceleration Curve: Header Line is not valid. Expected: '{0}, {1}, {2}', Got: {3}. Falling back to column index.", + Fields.Velocity, + Fields.Acceleration, + Fields.Deceleration, + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); return CreateFromColumnIndizes(data); } diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/ActuationsMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/ActuationsMapReader.cs index d4ada09049eedb141632363a38c8b278f9ccb2cf..150243d53db7a24e56afd37945a8709e7378117a 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/ActuationsMapReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/ActuationsMapReader.cs @@ -31,8 +31,7 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData { if (!HeaderIsValid(data.Columns)) { throw new VectoException("Invalid header for pneumatic actuations. expected: {0}, got: {1}", - string.Join(", ", Header), - string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + Header.Join(), data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); } var retVal = new Dictionary<MissionType, IActuations>(); diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/AlternatorReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/AlternatorReader.cs index 7919b1bd19d0a85bcfb5caba3f58b4634bcbdc87..e9108102edccf2d4a462b24c8e4d61402ee36c6b 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/AlternatorReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/AlternatorReader.cs @@ -76,7 +76,7 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData if (g.Any(x => x.Count() < 2)) { throw new ArgumentException( "Insufficient rows in csv to build a usable map for alternator {0}", - string.Join(", ", g.Where(x => x.Count() < 2).Select(x => x.Key))); + g.Where(x => x.Count() < 2).Select(x => x.Key).Join()); } return new CombinedAlternator(map, source); } diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/BatteryInternalResistanceReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/BatteryInternalResistanceReader.cs index 51f34949584695a0cb0fdb0afe60a6ff6153f924..6c765c12bcb531232c4a8d9325dfca8e7a91bebf 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/BatteryInternalResistanceReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/BatteryInternalResistanceReader.cs @@ -27,12 +27,13 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData if (data.Columns.Count == 2) { if (!data.Columns.Contains(Fields.StateOfCharge) || !data.Columns.Contains(Fields.InternalResistance)) { - data.Columns[0].ColumnName = Fields.StateOfCharge; - data.Columns[1].ColumnName = Fields.InternalResistance; LoggingObject.Logger<InternalResistanceMap>().Warn( "Internal Resistance Map Header is invalid. Expected: '{0}, {1}', Got: '{2}'. Falling back to column index.", - Fields.StateOfCharge, Fields.InternalResistance, - string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + Fields.StateOfCharge, + Fields.InternalResistance, + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); + data.Columns[0].ColumnName = Fields.StateOfCharge; + data.Columns[1].ColumnName = Fields.InternalResistance; } return new InternalResistanceMap(data.Rows.Cast<DataRow>().Select(row => { @@ -78,8 +79,8 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData } LoggingObject.Logger<InternalResistanceMap>().Warn( "Internal Resistance Map Header is invalid. Expected: '{0}', Got: '{1}'. Falling back to column index.", - string.Join(", ", col1.Select(x => x.Item2)), - string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + col1.Select(x => x.Item2).Join(), + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); } diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/BatteryMaxCurrentReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/BatteryMaxCurrentReader.cs index 5747491d5a31f6057510232f28f0b3051fcafd7a..612baa24643cb1b85945ac6619705acae9960117 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/BatteryMaxCurrentReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/BatteryMaxCurrentReader.cs @@ -22,11 +22,15 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData } if (!data.Columns.Contains(Fields.StateOfCharge) || !data.Columns.Contains(Fields.MaxDischargeCurrent) || !data.Columns.Contains(Fields.MaxChargeCurrent)) { + LoggingObject.Logger<InternalResistanceMap>().Warn( + "Max Current Map Header is invalid. Expected: '{0}, {1}, {2}', Got: '{3}'. Falling back to column index.", + Fields.StateOfCharge, + Fields.MaxChargeCurrent, + Fields.MaxDischargeCurrent, + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); data.Columns[0].ColumnName = Fields.StateOfCharge; data.Columns[1].ColumnName = Fields.MaxChargeCurrent; data.Columns[2].ColumnName = Fields.MaxDischargeCurrent; - LoggingObject.Logger<InternalResistanceMap>().Warn("Max Current Map Header is invalid. Expected: '{0}, {1}, {2}', Got: '{3}'. Falling back to column index.", - Fields.StateOfCharge, Fields.MaxChargeCurrent, Fields.MaxDischargeCurrent, string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); } return new MaxCurrentMap(data.Rows.Cast<DataRow>().Select(row => new MaxCurrentMap.MaxCurrentEntry() { SoC = row.ParseDouble(Fields.StateOfCharge) / 100, diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/BatterySOCReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/BatterySOCReader.cs index 3c6f5bd0159d49a882e0daa5110fe439a320df7b..ac3b230f9ed4ad3710a0cc62dbfce276a1595ebc 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/BatterySOCReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/BatterySOCReader.cs @@ -30,8 +30,11 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData { { data.Columns[0].ColumnName = Fields.StateOfCharge; data.Columns[1].ColumnName = Fields.BatteryVoltage; - LoggingObject.Logger<SOCMap>().Warn("SoC-Map Header is invalid. Expected: '{0}, {1}', Got: '{2}'. Falling back to column index.", - Fields.StateOfCharge, Fields.BatteryVoltage, string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + LoggingObject.Logger<SOCMap>().Warn( + "SoC-Map Header is invalid. Expected: '{0}, {1}', Got: '{2}'. Falling back to column index.", + Fields.StateOfCharge, + Fields.BatteryVoltage, + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); } return new SOCMap(data.Rows.Cast<DataRow>().Select(row => new SOCMap.SOCMapEntry { diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/CompressorMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/CompressorMapReader.cs index 93e7c02fdd71d1ad678047abbbb770c3af85847d..98ff4d9dcc5eec61c850de7ff9a9debcfa9cae14 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/CompressorMapReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/CompressorMapReader.cs @@ -12,7 +12,7 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData { public class CompressorMapReader { - public static readonly string[] Header = new[] { Fields.RPM, Fields.FlowRate, Fields.PowerOn, Fields.PowerOff }; + public static readonly string[] Header = { Fields.RPM, Fields.FlowRate, Fields.PowerOn, Fields.PowerOff }; public static ICompressorMap ReadFile(string filename, double dragCurveFactorClutch, string technology) { @@ -27,10 +27,9 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData public static IList<CompressorMapValues> Create(DataTable data, double dragCurveFactorClutch) { if (!HeaderIsValid(data.Columns)) { - throw new VectoException( - "Invalid column header. expected: {0}, got: {1}", - string.Join(", ", data.Columns.Cast<DataColumn>().Select(x => x.ColumnName)), - string.Join(", ", Header)); + throw new VectoException("Invalid column header. Expected: {0}, Got: {1}", + Header.Join(), + data.Columns.Cast<DataColumn>().Select(x => x.ColumnName).Join()); } if (data.Rows.Count < 3) { diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/CrossWindCorrectionCurveReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/CrossWindCorrectionCurveReader.cs index 3766144203e7c82c60d98263abbe8c9b6f31f1bc..0fc60b969a0ec19bb9f8993c169983612daf6074 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/CrossWindCorrectionCurveReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/CrossWindCorrectionCurveReader.cs @@ -100,8 +100,9 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData } LogManager.GetLogger(typeof(CrossWindCorrectionCurveReader).FullName).Warn( "Crosswind correction file: Header line is not valid. Expected: '{0}, {1}', Got: '{2}'. Falling back to column index.", - FieldsSpeedDependent.Velocity, FieldsSpeedDependent.Cd, - string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Reverse())); + FieldsSpeedDependent.Velocity, + FieldsSpeedDependent.Cd, + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); return ParseSpeedDependentFromColumnIndizes(data, aerodynamicDragArea); } diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/DrivingCycleDataReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/DrivingCycleDataReader.cs index 0e902e94c8df2de7d716e25bda085dc62453dc7d..fad460b71b359dd74fe91657b3595b5fbf526057 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/DrivingCycleDataReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/DrivingCycleDataReader.cs @@ -388,7 +388,7 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData var diff = headerStr.GroupBy(c => c).Where(g => g.Count() > 2).SelectMany(g => g).ToList(); if (diff.Any()) { if (throwExceptions) { - throw new VectoException("Column(s) defined more than once: " + string.Join(", ", diff.OrderBy(x => x))); + throw new VectoException($"Column(s) defined more than once: {diff.OrderBy(x => x).Join()}"); } return false; @@ -401,7 +401,7 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData diff = headerStr.Except(allowedCols.Select(x => x.ToLowerInvariant())).ToList(); if (diff.Any()) { if (throwExceptions) { - throw new VectoException("Column(s) not allowed: " + string.Join(", ", diff)); + throw new VectoException($"Column(s) not allowed: {diff.Join()}"); } return false; @@ -410,7 +410,7 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData diff = requiredCols.Select(x => x.ToLowerInvariant()).Except(headerStr).ToList(); if (diff.Any()) { if (throwExceptions) { - throw new VectoException("Column(s) required: " + string.Join(", ", diff)); + throw new VectoException($"Column(s) required: {diff.Join()}"); } return false; @@ -427,7 +427,7 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData if (colCount != 0 && colCount != cols.Length) { if (throwExceptions) { - throw new VectoException("Either all columns have to be defined or none of them: {0}", string.Join(", ", cols)); + throw new VectoException("Either all columns have to be defined or none of them: {0}", cols.Join()); } return false; diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricConsumerReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricConsumerReader.cs index 5e8bb8f525d361054e6f1a1c5352dc0c23f725d6..adf8c13612a9f96851fa5c3ee47f3ff2d519ff0f 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricConsumerReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricConsumerReader.cs @@ -28,14 +28,14 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData public static ElectricalConsumerList Create(TableData data) { if (!HeaderValid(data.Columns)) { - throw new VectoException("Invalid header. Expected: {0}, got: {1}", - string.Join(", ", Header), - string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + throw new VectoException("Invalid header. Expected: {0}, Got: {1}", + Header.Join(), + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); } var retVal = new List<ElectricalConsumer>(); foreach (DataRow row in data.Rows) { - var consumer = new ElectricalConsumer() { + var consumer = new ElectricalConsumer { Category = row.Field<string>(Fields.Category), ConsumerName = row.Field<string>(Fields.Consumer), BaseVehicle = row.ParseBoolean(Fields.BaseVehicle), diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricMotorMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricMotorMapReader.cs index abff89457f51f871ee566d57f1e3d8bcc81f0afd..7b819b5d8a8deb2ef6724dfbc58c88fd5b2c6bed 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricMotorMapReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/ElectricMotorMapReader.cs @@ -24,9 +24,11 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData { if (!headerValid) { LoggingObject.Logger<FuelConsumptionMap>().Warn( - "Efficiencymap: Header Line is not valid. Expected: '{0}, {1}, {2}', Got: {3}", - Fields.MotorSpeed, Fields.Torque, Fields.PowerElectrical, - string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + "Efficiency Map: Header Line is not valid. Expected: '{0}, {1}, {2}', Got: {3}. Falling back to column index.", + Fields.MotorSpeed, + Fields.Torque, + Fields.PowerElectrical, + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); data.Columns[0].ColumnName = Fields.MotorSpeed; data.Columns[1].ColumnName = Fields.Torque; data.Columns[2].ColumnName = Fields.PowerElectrical; diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/EnvironmentalContidionsMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/EnvironmentalContidionsMapReader.cs index f7dd3ee0922a8a6cece5b3dcd544b8e627fc8732..ee81cf6cdd239abccca46b1f0b31953d1957bbae 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/EnvironmentalContidionsMapReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/EnvironmentalContidionsMapReader.cs @@ -39,9 +39,9 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData if (!HeaderIsValid(data.Columns)) { throw new VectoException( - "Invalid Header for environmental conditions. Got: {0}, expected: {1}", - string.Join(", ", data.Columns.Cast<DataColumn>().Select(x => x.ColumnName)), - string.Join(", ", Header)); + "Invalid Header for environmental conditions. Expected: {0}, Got: {1}", + Header.Join(), + data.Columns.Cast<DataColumn>().Select(x => x.ColumnName).Join()); } foreach (DataRow row in data.Rows) { diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/FuelConsumptionMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/FuelConsumptionMapReader.cs index 19690eae244a46f6e4f7c0ae845f13798d0d1775..812dd6ad5445781fc6458fc8a86def7274515a54 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/FuelConsumptionMapReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/FuelConsumptionMapReader.cs @@ -69,9 +69,11 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData var headerValid = HeaderIsValid(data.Columns); if (!headerValid) { LoggingObject.Logger<FuelConsumptionMap>().Warn( - "FuelConsumptionMap: Header Line is not valid. Expected: '{0}, {1}, {2}', Got: {3}", - Fields.EngineSpeed, Fields.Torque, Fields.FuelConsumption, - string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + "FuelConsumptionMap: Header Line is not valid. Expected: '{0}, {1}, {2}', Got: {3}. Falling back to column index.", + Fields.EngineSpeed, + Fields.Torque, + Fields.FuelConsumption, + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); } var delaunayMap = new DelaunayMap("FuelConsumptionMap"); diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/FullLoadCurveReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/FullLoadCurveReader.cs index 9f6550bb27fe0b3f41e703459a2031708798fa61..f816b8fdbb624e17bd3e315c6b8bc7db20187b4b 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/FullLoadCurveReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/FullLoadCurveReader.cs @@ -71,8 +71,10 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData } else { LoggingObject.Logger<EngineFullLoadCurve>().Warn( "FullLoadCurve: Header Line is not valid. Expected: '{0}, {1}, {2}', Got: '{3}'. Falling back to column index.", - Fields.EngineSpeed, Fields.TorqueFullLoad, - Fields.TorqueDrag, string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + Fields.EngineSpeed, + Fields.TorqueFullLoad, + Fields.TorqueDrag, + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); entriesFld = CreateFromColumnIndizes(data); } @@ -88,7 +90,7 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData .Select(g => g.Key).ToList(); if (duplicates.Count > 0) { throw new VectoException( - "Error reading full-load curve: multiple entries for engine speeds {0}", string.Join(", ", duplicates)); + "Error reading full-load curve: multiple entries for engine speeds {0}", duplicates.Join()); } return new EngineFullLoadCurve(entriesFld, tmp); } diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/PTOIdleLossMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/PTOIdleLossMapReader.cs index 074d41cad997ac52c4942fa3a5940faacdb387e3..e6f051bc78a337c81934fc0635384f8f02aaf11c 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/PTOIdleLossMapReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/PTOIdleLossMapReader.cs @@ -68,11 +68,13 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData } if (!(data.Columns.Contains(Fields.EngineSpeed) && data.Columns.Contains(Fields.PTOTorque))) { - data.Columns[0].ColumnName = Fields.EngineSpeed; - data.Columns[1].ColumnName = Fields.PTOTorque; LoggingObject.Logger<RetarderLossMap>().Warn( "PTO Idle LossMap: Header Line is not valid. Expected: '{0}, {1}', Got: '{2}'. Falling back to column index.", - Fields.EngineSpeed, Fields.PTOTorque, string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + Fields.EngineSpeed, + Fields.PTOTorque, + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); + data.Columns[0].ColumnName = Fields.EngineSpeed; + data.Columns[1].ColumnName = Fields.PTOTorque; } return new PTOLossMap(data.Rows.Cast<DataRow>() diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/RetarderLossMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/RetarderLossMapReader.cs index 5848389660ff5ced3be6c11495f71ecc7838dca1..b4f60d00680a1aad33d832321e46afcfe73eb741 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/RetarderLossMapReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/RetarderLossMapReader.cs @@ -69,12 +69,13 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData } if (!data.Columns.Contains(Fields.RetarderSpeed) || !data.Columns.Contains(Fields.TorqueLoss)) { - data.Columns[0].ColumnName = Fields.RetarderSpeed; - data.Columns[1].ColumnName = Fields.TorqueLoss; LoggingObject.Logger<RetarderLossMap>().Warn( "RetarderLossMap: Header Line is not valid. Expected: '{0}, {1}', Got: '{2}'. Falling back to column index.", - Fields.RetarderSpeed, Fields.TorqueLoss, - string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + Fields.RetarderSpeed, + Fields.TorqueLoss, + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); + data.Columns[0].ColumnName = Fields.RetarderSpeed; + data.Columns[1].ColumnName = Fields.TorqueLoss; } return new RetarderLossMap(data.Rows.Cast<DataRow>() diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/SSMTechnologiesReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/SSMTechnologiesReader.cs index 6e9cc83ea5d9a43a5fdfc56f7604a1e2a1eca2b4..ace65ad980bb95ed67a27576129dfee528a66ceb 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/SSMTechnologiesReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/SSMTechnologiesReader.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Utils; @@ -34,9 +35,9 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData public static List<SSMTechnology> Create(DataTable data, string fileName) { if (!HeaderIsValid(data.Columns)) { - throw new VectoException("invalid header for techlist file. expected: {0} got: {1}", - string.Join(", ", headerCols), string.Join(", ", data.Columns) - ); + throw new VectoException("invalid header for techlist file. Expected: {0}, Got: {1}", + headerCols.Join(), + data.Columns.Cast<DataColumn>().Join()); } var retVal = new List<SSMTechnology>(); diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/ShiftPolygonReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/ShiftPolygonReader.cs index 63c2d717513f6ec3a00d197ad798ff4a241bb096..0d79e0f3ba4aab9b79002e779bb4260eb2f046a6 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/ShiftPolygonReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/ShiftPolygonReader.cs @@ -68,11 +68,12 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData entriesDown = CreateFromColumnNames(data, Fields.AngularSpeedDown); entriesUp = CreateFromColumnNames(data, Fields.AngularSpeedUp); } else { - LoggingObject.Logger<ShiftPolygon>() - .Warn( + LoggingObject.Logger<ShiftPolygon>().Warn( "ShiftPolygon: Header Line is not valid. Expected: '{0}, {1}, {2}', Got: '{3}'. Falling back to column index", - Fields.Torque, Fields.AngularSpeedUp, Fields.AngularSpeedDown, - string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Reverse())); + Fields.Torque, + Fields.AngularSpeedUp, + Fields.AngularSpeedDown, + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); entriesDown = CreateFromColumnIndizes(data, 1); entriesUp = CreateFromColumnIndizes(data, 2); } diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/TransmissionLossMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/TransmissionLossMapReader.cs index 286ab73ae4ff11bc658be6f349f0a6a8075f0eb0..e96fb5094ab019dba56d89aee0c4fff71b6cbbd0 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/TransmissionLossMapReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/TransmissionLossMapReader.cs @@ -78,9 +78,12 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData entries = CreateFromColumnNames(data); } else { LoggingObject.Logger<TransmissionLossMap>().Warn( - "TransmissionLossMap {5}: Header line is not valid. Expected: '{0}, {1}, {2}'. Got: '{4}'. Falling back to column index.", - Fields.InputSpeed, Fields.InputTorque, Fields.TorqeLoss, - string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Reverse()), gearName); + "TransmissionLossMap {0}: Header line is not valid. Expected: '{1}, {2}, {3}'. Got: '{4}'. Falling back to column index.", + gearName, + Fields.InputSpeed, + Fields.InputTorque, + Fields.TorqeLoss, + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); entries = CreateFromColumIndizes(data); } @@ -105,9 +108,12 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData List<TransmissionLossMap.GearLossMapEntry> entries; if (!HeaderIsValid(data.Columns)) { LoggingObject.Logger<TransmissionLossMap>().Warn( - "TransmissionLossMap {5}: Header line is not valid. Expected: '{0}, {1}, {2}'. Got: '{4}'. Falling back to column index.", - Fields.InputSpeed, Fields.InputTorque, Fields.TorqeLoss, - string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Reverse()), gearName); + "TransmissionLossMap {0}: Header line is not valid. Expected: '{1}, {2}, {3}'. Got: '{4}'. Falling back to column index.", + gearName, + Fields.InputSpeed, + Fields.InputTorque, + Fields.TorqeLoss, + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); data.Columns[0].ColumnName = Fields.InputSpeed; data.Columns[1].ColumnName = Fields.InputTorque; diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/WHRPowerReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/WHRPowerReader.cs index a917796dda0b4ed14896bbf1ca501e5e848a6ec9..b3d870fe0f9e2cac82645237cbb7fc64b5d67e2b 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/WHRPowerReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/WHRPowerReader.cs @@ -41,13 +41,15 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData if (!headerValid) { LoggingObject.Logger<FuelConsumptionMap>().Warn( "WHRMap: Header Line is not valid. Expected: '{0}, {1}, {2}', Got: {3}", - Fields.EngineSpeed, Fields.Torque, Fields.ElectricPower, - string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + Fields.EngineSpeed, + Fields.Torque, + Fields.ElectricPower, + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); } // todo mk-2021-08-26 this check is redundant. Previous code would have thrown exception otherwise. if (!headerValid && (type == WHRType.ElectricalOutput || type == WHRType.MechanicalOutputDrivetrain)) { - throw new VectoException("expected column headers: {0}", string.Join(", ", whrColumn)); + throw new VectoException("expected column headers: {0}", whrColumn.Join()); } if (!headerValid) { diff --git a/VectoCore/VectoCore/InputData/Reader/ShiftStrategy/LookupDataReader.cs b/VectoCore/VectoCore/InputData/Reader/ShiftStrategy/LookupDataReader.cs index 740fdf4e864631498abbf293870305a41583dd39..debcb09b169c3f75d64405226489744d51d27070 100644 --- a/VectoCore/VectoCore/InputData/Reader/ShiftStrategy/LookupDataReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ShiftStrategy/LookupDataReader.cs @@ -5,6 +5,7 @@ using System.Linq; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; namespace TUGraz.VectoCore.InputData.Reader.ShiftStrategy { @@ -33,10 +34,10 @@ namespace TUGraz.VectoCore.InputData.Reader.ShiftStrategy if (!HeaderIsValid(data.Columns)) { LoggingObject.Logger<ShareIdleLowLookup>().Warn( - "{0} lookup: header line is not valid. Expected: '{1}', Got: {2}", + "{0} lookup: Header line is not valid. Expected: '{1}', Got: {2}", _name, - string.Join(", ", _columns), - string.Join(", ", data.Columns.Cast<DataColumn>().Select(c => c.ColumnName))); + _columns.Join(), + data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Join()); for (var i = 0; i < Math.Min(_columns.Length, data.Columns.Count); i++) { data.Columns[i].Caption = _columns[i]; } diff --git a/VectoCore/VectoCore/Models/Connector/Ports/Impl/BatteryResponse.cs b/VectoCore/VectoCore/Models/Connector/Ports/Impl/BatteryResponse.cs index 9c9675d60b1d65d6307e275f1fb3efd95b45a7c0..a64d9ad9801f8d15824061f93ee3f7d9f6a1b76f 100644 --- a/VectoCore/VectoCore/Models/Connector/Ports/Impl/BatteryResponse.cs +++ b/VectoCore/VectoCore/Models/Connector/Ports/Impl/BatteryResponse.cs @@ -89,7 +89,7 @@ namespace TUGraz.VectoCore.Models.Connector.Ports.Impl public override string ToString() { var t = GetType(); - return $"{t.Name}{{{string.Join(", ", t.GetProperties().Select(p => $"{p.Name}: {p.GetValue(this)}"))}}}"; + return $"{t.Name}{{{t.GetProperties().Select(p => $"{p.Name}: {p.GetValue(this)}").Join()}}}"; } } diff --git a/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs b/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs index ab6c8ffcfd41a629788dcaddc54fc12d683463b1..1953ba8a193cfd6baa92efef29ea02fc21dee929 100644 --- a/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs +++ b/VectoCore/VectoCore/Models/Connector/Ports/Impl/Response.cs @@ -110,7 +110,7 @@ namespace TUGraz.VectoCore.Models.Connector.Ports.Impl public override string ToString() { var t = GetType(); - return $"{t.Name}{{{string.Join(", ", t.GetProperties().Select(p => $"{p.Name}: {p.GetValue(this)}"))}}}"; + return $"{t.Name}{{{t.GetProperties().Select(p => $"{p.Name}: {p.GetValue(this)}").Join()}}}"; } } diff --git a/VectoCore/VectoCore/Models/Declaration/WeightingGroups.cs b/VectoCore/VectoCore/Models/Declaration/WeightingGroups.cs index c09199e027e0fb5a16f8f903691317649ac5e718..ba02d6eb54d14f50e44b1380da8dd994d2d0579f 100644 --- a/VectoCore/VectoCore/Models/Declaration/WeightingGroups.cs +++ b/VectoCore/VectoCore/Models/Declaration/WeightingGroups.cs @@ -99,7 +99,7 @@ namespace TUGraz.VectoCore.Models.Declaration case WeightingGroup.Group9LH: case WeightingGroup.Group10RD: case WeightingGroup.Group10LH: - return string.Join("-", Regex.Split(group.ToString().Replace(Prefix, ""), @"(\d+|\w+)").Where(x => !string.IsNullOrWhiteSpace(x))); + return Regex.Split(group.ToString().Replace(Prefix, ""), @"(\d+|\w+)").Where(x => !string.IsNullOrWhiteSpace(x)).Join("-"); default: return Constants.NOT_AVAILABLE; } diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PCCSegmentPreprocessor.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PCCSegmentPreprocessor.cs index 0362e869ec363b4d9153af13a857cd7d87522825..fa963140e55e0e9b7c89840e8bdcd8a7592f2877 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/PCCSegmentPreprocessor.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/PCCSegmentPreprocessor.cs @@ -34,7 +34,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl var preProcessor = new PCCEcoRollEngineStopPreprocessor(Container, slopes, PCCDriverData.MinSpeed, maxSpeed); preProcessor.RunPreprocessing(); - DebugWriteLine("Slopes:\n" + string.Join("\n", slopes.Select(p => $"{p.Key.AsKmph:F}\t{p.Value.ToInclinationPercent():P}"))); + DebugWriteLine($"Slopes:\n{slopes.Select(p => $"{p.Key.AsKmph:F}\t{p.Value.ToInclinationPercent():P}").Join("\n")}"); var runData = Container.RunData; diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs index a92f711d82288a5ce7eb467fdef8c9869d42b514..6b902d12c2bccb46d3e3fcf0cec2ec38fc8122ec 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs @@ -288,7 +288,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl var validationErrors = run.Validate(_mode, jobType, emPosition, gearboxtype, isEms); if (validationErrors.Any()) { throw new VectoException("Validation of Run-Data Failed: " + - string.Join("\n", validationErrors.Select(r => r.ErrorMessage + string.Join("; ", r.MemberNames)))); + $"{validationErrors.Select(r => r.ErrorMessage + r.MemberNames.Join("; ")).Join("\n")}"); } } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/AccelerationCurve.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/AccelerationCurve.cs index 784b775cc30020e7c5ae10b567035a5997d42a51..6807e36b06539670cb2518fc5241481f5d245eb5 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/AccelerationCurve.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/AccelerationCurve.cs @@ -49,7 +49,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data if (smallValues.Count >= 2) { Log.Error( "Found small velocity entries in Driver-Acceleration/Deceleration file. Values dismissed:" + - string.Join(", ", smallValues.Skip(1).Select(e => e.Key.AsKmph.ToString("F1")))); + smallValues.Skip(1).Select(e => e.Key.AsKmph.ToString("F1")).Join()); foreach (var kv in smallValues.Skip(1)) { _entries.Remove(kv); } diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs index 6721ea509c6da27e9585a537570474ca52e11480..84fda24b282d73e4525dce8d03c7d8a5cc033a21 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATShiftStrategy.cs @@ -83,7 +83,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl EngineInertia = dataBus.RunData.EngineData?.Inertia ?? 0.SI<KilogramSquareMeter>(); if (Gears.Any(x => !x.TorqueConverterLocked.HasValue)) { - throw new VectoException("Gear list must have TC info for all gears! {0}", string.Join(", ", Gears)); + throw new VectoException("Gear list must have TC info for all gears! {0}", Gears.Join()); } MaxStartGear = Gears.Any() ? Gears.First() : new GearshiftPosition(0); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BatterySystem.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BatterySystem.cs index 8ea633a720e7c4af99780591fb4075cf72cc0747..638a043f1ae2cf4dfda8118b28d417ad9abd53bd 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BatterySystem.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BatterySystem.cs @@ -283,7 +283,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } if (limitBB.Count > 0) { - Log.Debug($"BB ${string.Join(", ", limitBB.Keys)} are at max - recalculating power distribution"); + Log.Debug($"BB ${limitBB.Keys.Join()} are at max - recalculating power distribution"); } } while (!(distributedPower + (limitBB.Sum(x => x.Value) ?? 0.SI<Watt>())) .IsEqual(powerDemand, 1e-3.SI<Watt>())); diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs index ce2a7da88666c6ae658a157ebcdc022529a64c97..48c59fab359ce6f5212f3a813dcf3379e827a8c9 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs @@ -248,6 +248,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl // electric motor is directly connected to the ICE, ICE is off and EM is off - do not apply drag loss emTorqueDt = 0.SI<NewtonMeter>(); emTorque = 0.SI<NewtonMeter>(); + emOff = true; } if (ElectricPower == null || emTorqueDt == null) { diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs index 9f589092627cd34367acfef13b210fc5ccb2fc93..ca16d4e0ebd3dd34274b37e2c261f51dd0638af7 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs @@ -1191,6 +1191,22 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies return; } + var iceOn = DataBus.EngineInfo.EngineOn; + // if Hybrid P1 and Engine is off, the search for braking power is not possible: + // Therefore, switch on engine (if reasonable), otherwise simply do NOT search for mechanicalAssistPower. + if (emPos == PowertrainPosition.HybridP1 && !DataBus.EngineCtl.CombustionEngineOn) { + + var gearboxOut = firstResponse.Gearbox.OutputSpeed * firstResponse.Gearbox.OutputTorque; + var elMotor = DataBus.ElectricMotorInfo(PowertrainPosition.HybridP1); + var powerToleranceEl = 0.1 * elMotor.MaxPowerDrive(DataBus.BatteryInfo.InternalVoltage, firstResponse.Engine.EngineSpeed); + if (gearboxOut - firstResponse.Engine.DragPower < powerToleranceEl) { + DataBus.EngineCtl.CombustionEngineOn = true; + iceOn = true; + } else { + return; + } + } + // full recuperation is not possible - ICE would need to propel - search max possible EM torque var emRecuperationTq = SearchAlgorithm.Search( maxRecuperationResponse.ElectricMotor.ElectricMotorPowerMech / @@ -1208,7 +1224,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies }, evaluateFunction: emTq => { var cfg = new HybridStrategyResponse { - CombustionEngineOn = DataBus.EngineInfo.EngineOn, + CombustionEngineOn = iceOn, GearboxInNeutral = false, NextGear = nextGear, MechanicalAssistPower = new Dictionary<PowertrainPosition, Tuple<PerSecond, NewtonMeter>> { diff --git a/VectoCore/VectoCore/OutputData/ModalDataPostprocessingCorrection.cs b/VectoCore/VectoCore/OutputData/ModalDataPostprocessingCorrection.cs index 20a91b0ce750e49ed4a248ff037b8031b0ca3743..105ef20864a38a9d55c5a4ffb864f2afdda48519 100644 --- a/VectoCore/VectoCore/OutputData/ModalDataPostprocessingCorrection.cs +++ b/VectoCore/VectoCore/OutputData/ModalDataPostprocessingCorrection.cs @@ -183,8 +183,8 @@ namespace TUGraz.VectoCore.OutputData // case C3a if (runData.ElectricMachinesData.Count != 1) { throw new VectoException("exactly 1 electric machine is required. got {0} ({1})", - runData.ElectricMachinesData.Count, - string.Join(",", runData.ElectricMachinesData.Select(x => x.Item1.ToString()))); + runData.ElectricMachinesData.Count, + runData.ElectricMachinesData.Select(x => x.Item1.ToString()).Join()); } var emPos = runData.ElectricMachinesData.First().Item1; @@ -271,7 +271,7 @@ namespace TUGraz.VectoCore.OutputData if (runData.ElectricMachinesData.Count != 1) { throw new VectoException("exactly 1 electric machine is required. got {0} ({1})", runData.ElectricMachinesData.Count, - string.Join(",", runData.ElectricMachinesData.Select(x => x.Item1.ToString()))); + runData.ElectricMachinesData.Select(x => x.Item1.ToString()).Join()); } var emPos = runData.ElectricMachinesData.First().Item1; diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs index e130953fc92152f03d377cb13f2322b7b7a7cc0f..df08f06bdac90e5f2835dea3e933bd81061a76c2 100644 --- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs @@ -310,7 +310,7 @@ namespace TUGraz.VectoCore.OutputData passengerCount = runData.VehicleData.PassengerCount; } - row[Fields.VEHICLE_FUEL_TYPE] = string.Join(", ", modData.FuelData.Select(x => x.GetLabel())); + row[Fields.VEHICLE_FUEL_TYPE] = modData.FuelData.Select(x => x.GetLabel().Join()); var totalTime = modData.Duration; row[Fields.TIME] = (ConvertedSI)totalTime; @@ -347,7 +347,7 @@ namespace TUGraz.VectoCore.OutputData fuel => modData.TimeIntegral<Kilogram>(modData.GetColumnName(fuel.FuelData, ModalResultField.FCWHTCc)) / modData.TimeIntegral<Kilogram>(modData.GetColumnName(fuel.FuelData, ModalResultField.FCMap))) .Select(dummy => (double)dummy).ToArray(); - row[Fields.ENGINE_ACTUAL_CORRECTION_FACTOR] = string.Join(" / ", fuelsWhtc); + row[Fields.ENGINE_ACTUAL_CORRECTION_FACTOR] = fuelsWhtc.Join(" / "); } row[Fields.P_WHEEL_POS] = modData.PowerWheelPositive().ConvertToKiloWatt(); @@ -841,7 +841,7 @@ namespace TUGraz.VectoCore.OutputData row[Fields.ENGINE_MANUFACTURER] = data.Manufacturer; row[Fields.ENGINE_MODEL] = data.ModelName; row[Fields.ENGINE_CERTIFICATION_NUMBER] = data.CertificationNumber; - row[Fields.ENGINE_FUEL_TYPE] = string.Join(" / ", data.Fuels.Select(x => x.FuelData.GetLabel())); + row[Fields.ENGINE_FUEL_TYPE] = data.Fuels.Select(x => x.FuelData.GetLabel()).Join(" / "); row[Fields.ENGINE_RATED_POWER] = data.RatedPowerDeclared != null && data.RatedPowerDeclared > 0 ? data.RatedPowerDeclared.ConvertToKiloWatt() : data.FullLoadCurves[0].MaxPower.ConvertToKiloWatt(); @@ -851,12 +851,12 @@ namespace TUGraz.VectoCore.OutputData : (ConvertedSI)data.FullLoadCurves[0].RatedSpeed.AsRPM.SI<Scalar>(); row[Fields.ENGINE_DISPLACEMENT] = data.Displacement.ConvertToCubicCentiMeter(); - row[Fields.ENGINE_WHTC_URBAN] = string.Join(" / ", data.Fuels.Select(x => x.WHTCUrban)); - row[Fields.ENGINE_WHTC_RURAL] = string.Join(" / ", data.Fuels.Select(x => x.WHTCRural)); - row[Fields.ENGINE_WHTC_MOTORWAY] = string.Join(" / ", data.Fuels.Select(x => x.WHTCMotorway)); - row[Fields.ENGINE_BF_COLD_HOT] = string.Join(" / ", data.Fuels.Select(x => x.ColdHotCorrectionFactor)); - row[Fields.ENGINE_CF_REG_PER] = string.Join(" / ", data.Fuels.Select(x => x.CorrectionFactorRegPer)); - row[Fields.ENGINE_ACTUAL_CORRECTION_FACTOR] = string.Join(" / ", data.Fuels.Select(x => x.FuelConsumptionCorrectionFactor)); + row[Fields.ENGINE_WHTC_URBAN] = data.Fuels.Select(x => x.WHTCUrban).Join(" / "); + row[Fields.ENGINE_WHTC_RURAL] = data.Fuels.Select(x => x.WHTCRural).Join(" / "); + row[Fields.ENGINE_WHTC_MOTORWAY] = data.Fuels.Select(x => x.WHTCMotorway).Join(" / "); + row[Fields.ENGINE_BF_COLD_HOT] = data.Fuels.Select(x => x.ColdHotCorrectionFactor).Join(" / "); + row[Fields.ENGINE_CF_REG_PER] = data.Fuels.Select(x => x.CorrectionFactorRegPer).Join(" / "); + row[Fields.ENGINE_ACTUAL_CORRECTION_FACTOR] = data.Fuels.Select(x => x.FuelConsumptionCorrectionFactor).Join(" / "); } private static void WriteAxleWheelsData(List<Axle> data, DataRow row) @@ -914,7 +914,7 @@ namespace TUGraz.VectoCore.OutputData col.SetOrdinal(Table.Columns[Fields.CARGO_VOLUME].Ordinal); } - row[colName] = aux.Technology == null ? "" : string.Join("; ", aux.Technology); + row[colName] = aux.Technology == null ? "" : aux.Technology.Join("; "); } if (busAux == null) { @@ -924,7 +924,7 @@ namespace TUGraz.VectoCore.OutputData row[string.Format(Fields.AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.HeatingVentilationAirCondition)] = busAux.SSMInputs is ISSMDeclarationInputs inputs ? inputs.HVACTechnology : "engineering mode"; row[string.Format(Fields.AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.ElectricSystem)] = - string.Join("/", busAux.ElectricalUserInputsConfig.AlternatorType.GetLabel()); + busAux.ElectricalUserInputsConfig.AlternatorType.GetLabel().Join("/"); row[string.Format(Fields.AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.PneumaticSystem)] = runData.JobType == VectoSimulationJobType.BatteryElectricVehicle ? "-" : busAux.PneumaticUserInputsConfig.CompressorMap.Technology; } diff --git a/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriter.cs b/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriter.cs index 523c1d2bbdfc035be37483b20397a3920ee24eac..7a264233edcb4550215c763921976fdbc3a37e38 100644 --- a/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriter.cs +++ b/VectoCore/VectoCore/OutputData/XML/Engineering/XMLEngineeringWriter.cs @@ -38,6 +38,7 @@ using Ninject; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.OutputData.XML.Engineering.Factory; using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces; using TUGraz.VectoCore.Utils; @@ -127,10 +128,8 @@ namespace TUGraz.VectoCore.OutputData.XML.Engineering private XAttribute GetSchemaLocations() { var xsns = RegisterNamespace(XMLDefinitions.XML_SCHEMA_NAMESPACE); - - return new XAttribute( - xsns + "schemaLocation", - string.Join(" ", NamespaceLocationMap.Where(x => _namespaces.ContainsKey(x.Key)).Select(x => $"{x.Key} {x.Value}"))); + return new XAttribute(xsns + "schemaLocation", + NamespaceLocationMap.Where(x => _namespaces.ContainsKey(x.Key)).Select(x => $"{x.Key} {x.Value}").Join(" ")); } public WriterConfiguration Configuration { get; set; } diff --git a/VectoCore/VectoCore/Utils/DataIntegrityHelper.cs b/VectoCore/VectoCore/Utils/DataIntegrityHelper.cs index edc9e98a1ea4aa3be9d37ae88e47430358216b33..2c02bc0442bee3d7e835d49ce8aa47a8343e9a66 100644 --- a/VectoCore/VectoCore/Utils/DataIntegrityHelper.cs +++ b/VectoCore/VectoCore/Utils/DataIntegrityHelper.cs @@ -31,6 +31,7 @@ using System.Security.Cryptography; using System.Text; +using TUGraz.VectoCommon.Utils; namespace TUGraz.VectoCore.Utils { @@ -38,8 +39,7 @@ namespace TUGraz.VectoCore.Utils { public static string ComputeDigestValue(string[] lines) { - var hash = System.Convert.ToBase64String(GetHash(string.Join("\n", lines))); - + var hash = System.Convert.ToBase64String(GetHash(lines.Join("\n"))); return $"SHA256: {hash}"; } diff --git a/VectoCore/VectoCore/Utils/DebugData.cs b/VectoCore/VectoCore/Utils/DebugData.cs index e1c69f24b982bfd9ae15920e008c313fce2a83cc..59b053efe03ac035793f167c20a741370af74659 100644 --- a/VectoCore/VectoCore/Utils/DebugData.cs +++ b/VectoCore/VectoCore/Utils/DebugData.cs @@ -31,6 +31,7 @@ using System.Collections.Generic; using System.Diagnostics; +using TUGraz.VectoCommon.Utils; namespace TUGraz.VectoCore.Utils { @@ -54,7 +55,7 @@ namespace TUGraz.VectoCore.Utils public override string ToString() { #if DEBUG - return string.Join("\n", Data); + return Data.Join("\n"); #else return "-"; #endif diff --git a/VectoCore/VectoCore/Utils/DelaunayMap.cs b/VectoCore/VectoCore/Utils/DelaunayMap.cs index 15555fb7e99f9091164c6216a66443b049732360..84afb4eb9280fd5495dc2bfbcd741f8520734d4d 100644 --- a/VectoCore/VectoCore/Utils/DelaunayMap.cs +++ b/VectoCore/VectoCore/Utils/DelaunayMap.cs @@ -163,7 +163,7 @@ namespace TUGraz.VectoCore.Utils } if (duplicates.Any()) { throw new VectoException("{0}: Input Data for Delaunay map contains duplicates! \n{1}", _mapName, - string.Join("\n", duplicates.Select(pt => $"{pt.Key.X} / {pt.Key.Y}"))); + duplicates.Select(pt => $"{pt.Key.X} / {pt.Key.Y}").Join("\n")); } } @@ -220,8 +220,8 @@ namespace TUGraz.VectoCore.Utils var frame = new StackFrame(2); var method = frame.GetMethod(); System.Diagnostics.Debug.Assert(method.DeclaringType != null, "method.DeclaringType != null"); - var type = string.Join("", method.DeclaringType.Name.Split(Path.GetInvalidFileNameChars())); - var methodName = string.Join("", method.Name.Split(Path.GetInvalidFileNameChars())); + var type = method.DeclaringType.Name.Split(Path.GetInvalidFileNameChars()).Join(""); + var methodName = method.Name.Split(Path.GetInvalidFileNameChars()).Join(""); Directory.CreateDirectory("delaunay"); chart.SaveImage($"delaunay\\{type}_{methodName}_{superTriangle.GetHashCode()}_{i}.png", ChartImageFormat.Png); diff --git a/VectoCore/VectoCore/Utils/SearchAlgorithm.cs b/VectoCore/VectoCore/Utils/SearchAlgorithm.cs index 158f1796acddf23d2fcd0d992b008110f4fd7870..8f86e626f6df667d569b3f269c7457fc958b6002 100644 --- a/VectoCore/VectoCore/Utils/SearchAlgorithm.cs +++ b/VectoCore/VectoCore/Utils/SearchAlgorithm.cs @@ -94,23 +94,14 @@ namespace TUGraz.VectoCore.Utils T result; try { if (forceLineSearch) { - result = LineSearch(x, y, interval, getYValue, evaluateFunction, criterion, abortCriterion, ref iterationCount); - + result = LineSearch(x, y, interval, getYValue, evaluateFunction, criterion, abortCriterion, ref iterationCount); } else { - result = InterpolateSearch( - x, y, interval, getYValue, evaluateFunction, criterion, abortCriterion, - ref iterationCount); + result = InterpolateSearch(x, y, interval, getYValue, evaluateFunction, criterion, abortCriterion, ref iterationCount); } } catch (VectoException ex) { var log = LogManager.GetLogger(typeof(SearchAlgorithm).FullName); - log.Debug("Falling back to InterpolationSearch in reverse. Normal InterpolationSearch failed: " + ex.Message); - try { - result = InterpolateSearch(x, y, -interval, getYValue, evaluateFunction, criterion, abortCriterion, - ref iterationCount); - } catch (VectoException ex1) { - log.Debug("Falling back to LineSearch. Reverse InterpolationSearch failed: " + ex1.Message); - result = LineSearch(x, y, interval, getYValue, evaluateFunction, criterion, abortCriterion, ref iterationCount); - } + log.Debug("Falling back to LineSearch. Reverse InterpolationSearch failed: " + ex.Message); + result = LineSearch(x, y, interval, getYValue, evaluateFunction, criterion, abortCriterion, ref iterationCount); } return result; } @@ -207,16 +198,16 @@ namespace TUGraz.VectoCore.Utils Func<T, object> evaluateFunction, Func<object, double> criterion, Func<object, int, bool> abortCriterion, ref int iterationCount) where T : SIBase<T> { - var x1 = x1SI.Value(); + var (x1, y1) = (x1SI.Value(), y1SI.Value()); var interval = intervalSI.Value(); - var y1 = y1SI.Value(); var log = LogManager.GetLogger(typeof(SearchAlgorithm).FullName); - var debug = new DebugData(); - debug.Add(new { x = x1, y = y1 }); log.Debug("Log Disabled during InterpolateSearch."); LogManager.DisableLogging(); + var debug = new DebugData(); + debug.Add(new { x = x1, y = y1 }); + try { var x2 = x1 + interval; var result = evaluateFunction(x2.SI<T>()); @@ -240,19 +231,21 @@ namespace TUGraz.VectoCore.Utils debug.Add(new { x = x2, y = y2, delta = criterion(result), result }); var k = (y2 - y1) / (x2 - x1); - var d = y2 - k * x2; - x1 = x2; - x2 = -d / k; + if (count == 2 && k.IsEqual(0)) { + x2 = x1 - interval; + y2 = y1SI.Value(); + } else { + var d = y2 - k * x2; + x1 = x2; + x2 = -d / k; + } if (double.IsInfinity(x2) || double.IsNaN(x2)) { debug.Add(new { x = x2, y = getYValue(result).Value(), delta = criterion(result), result }); LogManager.EnableLogging(); log.Debug("InterpolateSearch could not get more exact. Aborting after {0} function calls.", count); LogManager.DisableLogging(); AppendDebug(debug); - //iterationCount += count; - - //return x1.SI<T>(); - throw new VectoSearchAbortedException("InterpolateLinearSearch"); + throw new VectoSearchAbortedException("InterpolateLinearSearch: y-Value constant"); } result = evaluateFunction(x2.SI<T>()); @@ -260,7 +253,7 @@ namespace TUGraz.VectoCore.Utils LogManager.EnableLogging(); log.Debug("InterpolateSearch aborted due to abortCriterion: {0}", result); LogManager.DisableLogging(); - throw new VectoSearchAbortedException("InterpolateLinearSearch"); + throw new VectoSearchAbortedException("InterpolateLinearSearch: AbortCriterion true"); } if (criterion(result).IsEqual(0, Constants.SimulationSettings.InterpolateSearchTolerance)) { debug.Add(new { x = x2, y = getYValue(result).Value(), delta = criterion(result), result }); @@ -270,7 +263,7 @@ namespace TUGraz.VectoCore.Utils AppendDebug(debug); return x2.SI<T>(); } - + y1 = y2; } } finally { diff --git a/VectoCore/VectoCore/Utils/VectoCSVFile.cs b/VectoCore/VectoCore/Utils/VectoCSVFile.cs index e4974252dbcb3c43c966eb21bdad52a54f8667f3..3f7928e12af4795b86e01068036b608398452719 100644 --- a/VectoCore/VectoCore/Utils/VectoCSVFile.cs +++ b/VectoCore/VectoCore/Utils/VectoCSVFile.cs @@ -208,7 +208,7 @@ namespace TUGraz.VectoCore.Utils } } var header = table.Columns.Cast<DataColumn>().Select(col => col.Caption ?? col.ColumnName); - entries.Add(string.Join(Delimiter, header)); + entries.Add(header.Join(Delimiter)); var columnFormatter = new Func<ConvertedSI, string>[table.Columns.Count]; for (var i = 0; i < table.Columns.Count; i++) { @@ -241,7 +241,7 @@ namespace TUGraz.VectoCore.Utils formattedList[i] = $"\"{formattedList[i]}\""; } } - entries.Add(string.Join(Delimiter, formattedList)); + entries.Add(formattedList.Join(Delimiter)); } if (addDigest) { diff --git a/VectoCore/VectoCore/Utils/XMLHelper.cs b/VectoCore/VectoCore/Utils/XMLHelper.cs index 49d6fff697cf95f5e99990f585ccfb94b57c375f..d9cdfdd8aa9bf8a654750b20d1c227fd0bc04094 100644 --- a/VectoCore/VectoCore/Utils/XMLHelper.cs +++ b/VectoCore/VectoCore/Utils/XMLHelper.cs @@ -187,7 +187,7 @@ namespace TUGraz.VectoCore.Utils public static string QueryLocalName(params string[] nodePath) { - return "./" + string.Join("/", nodePath.Where(x => x != null).Select(x => $"/*[local-name()='{x}']").ToArray()); + return "./" + nodePath.Where(x => x != null).Select(x => $"/*[local-name()='{x}']").Join("/"); } diff --git a/VectoCore/VectoCore/Utils/XMLValidator.cs b/VectoCore/VectoCore/Utils/XMLValidator.cs index e477b6710b975e434f4599ea60b54ae0b4879c5f..2fc93738b9ec68c14b76972371ff72cf69aefa8b 100644 --- a/VectoCore/VectoCore/Utils/XMLValidator.cs +++ b/VectoCore/VectoCore/Utils/XMLValidator.cs @@ -99,7 +99,7 @@ namespace TUGraz.VectoCore.Utils _validationErrorAction(args?.Severity ?? XmlSeverityType.Error, new ValidationEvent { ValidationEventArgs = args }); } - public string ValidationError => _validationErrors.Any() ? string.Join(Environment.NewLine, _validationErrors) : null; + public string ValidationError => _validationErrors.Any() ? _validationErrors.Join(Environment.NewLine) : null; public static void CallBackExceptionOnError(XmlSeverityType severity, ValidationEvent evt) { diff --git a/VectoCore/VectoCore/Utils/XPathHelper.cs b/VectoCore/VectoCore/Utils/XPathHelper.cs index 3f18f3a79d84279eaad183e20bb2807d41a899b2..a9177e08ce06749d05c13d0a746e4244491b554e 100644 --- a/VectoCore/VectoCore/Utils/XPathHelper.cs +++ b/VectoCore/VectoCore/Utils/XPathHelper.cs @@ -32,6 +32,7 @@ using System.Linq; using System.Xml; using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; namespace TUGraz.VectoCore.Utils @@ -49,12 +50,9 @@ namespace TUGraz.VectoCore.Utils : 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 Query(params string[] xpathSections) { + return xpathSections.Select( + x => string.IsNullOrWhiteSpace(x) || x.StartsWith("..") || x.Contains(":") || x.StartsWith("@") ? x : NSPrefix(x)).Join("/"); } public string QueryConstraint(string elementName, string name, string value, diff --git a/VectoCore/VectoCoreTest/Algorithms/MeanShiftClusteringTest.cs b/VectoCore/VectoCoreTest/Algorithms/MeanShiftClusteringTest.cs index 8bc4baba600bf587ab0e380aa6cc29510c04cbca..2ddaed78ae81533cd3424a7b57eeb9f130b0b319 100644 --- a/VectoCore/VectoCoreTest/Algorithms/MeanShiftClusteringTest.cs +++ b/VectoCore/VectoCoreTest/Algorithms/MeanShiftClusteringTest.cs @@ -33,6 +33,7 @@ using System; using System.Collections.Generic; using System.Linq; using NUnit.Framework; +using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Tests.Algorithms @@ -60,14 +61,14 @@ namespace TUGraz.VectoCore.Tests.Algorithms //Console.WriteLine(string.Join(", ", entries)); - var clusterer = new MeanShiftClustering() { + var clusterer = new MeanShiftClustering { ClusterCount = 8 }; var clusters = clusterer.FindClusters(entries.ToArray(), 10); //Console.WriteLine(clusterer.IterationCount); - Console.WriteLine(string.Join(", ", centers)); - Console.WriteLine(string.Join(", ", clusters)); + Console.WriteLine(centers.Join()); + Console.WriteLine(clusters.Join()); Assert.AreEqual(centers.Length, clusters.Length); foreach (var center in centers) { @@ -87,7 +88,7 @@ namespace TUGraz.VectoCore.Tests.Algorithms var clusterer = new MeanShiftClustering(); var clusters = clusterer.FindClusters(entries.ToArray(), 0.1); - Console.WriteLine(string.Join(", ", clusters)); + Console.WriteLine(clusters.Join()); } } } diff --git a/VectoCore/VectoCoreTest/Integration/ADAS/ADASTestsConventional.cs b/VectoCore/VectoCoreTest/Integration/ADAS/ADASTestsConventional.cs index c37e215d09e90cd47f7b597a3c570de25c88d1a4..b964fb5da2799de934b9001b2da63e34dc73c093 100644 --- a/VectoCore/VectoCoreTest/Integration/ADAS/ADASTestsConventional.cs +++ b/VectoCore/VectoCoreTest/Integration/ADAS/ADASTestsConventional.cs @@ -1400,7 +1400,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS private void TestPCC(string testname, params (double start, double end, PCCStates pcc, DrivingAction action)[] data) { - var jobName = testname.Split('_').Slice(0, -2).JoinString("_"); + var jobName = testname.Split('_').Slice(0, -2).Join("_"); var cycleName = testname.Split('_').Reverse().Skip(1).First(); DoTestPCC(jobName, cycleName, data); } diff --git a/VectoCore/VectoCoreTest/Integration/ADAS/ADASTestsHEV.cs b/VectoCore/VectoCoreTest/Integration/ADAS/ADASTestsHEV.cs index 3ba1c7fd3e3391b1bd41f3253bd75b394e2049d3..f6d357b10b1195932091e79b6f2104dde8707453 100644 --- a/VectoCore/VectoCoreTest/Integration/ADAS/ADASTestsHEV.cs +++ b/VectoCore/VectoCoreTest/Integration/ADAS/ADASTestsHEV.cs @@ -1839,7 +1839,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS private void TestPCC(string testname, params (double start, double end, PCCStates pcc, DrivingAction action)[] data) { - var jobName = testname.Split('_').Slice(0, -2).JoinString("_"); + var jobName = testname.Split('_').Slice(0, -2).Join("_"); var cycleName = testname.Split('_').Reverse().Skip(1).First(); DoTestPCC(jobName, cycleName, data); } diff --git a/VectoCore/VectoCoreTest/Integration/ADAS/ADASTestsPEV.cs b/VectoCore/VectoCoreTest/Integration/ADAS/ADASTestsPEV.cs index 20800ec8df1bf844c971a68add66c26312bcbe27..e61588d3c9a29eaca2c3cb3a663a2cd6055cf930 100644 --- a/VectoCore/VectoCoreTest/Integration/ADAS/ADASTestsPEV.cs +++ b/VectoCore/VectoCoreTest/Integration/ADAS/ADASTestsPEV.cs @@ -53,20 +53,20 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS #region E2 [TestCase] - public void Class5_E2_NoADAS_CaseA() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_NoADAS_CaseA() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 5647, OutsideSegment, Accelerate), // len: 5647m (5647, 5846, OutsideSegment, Coast), // len: 199m (5846, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_NoADAS_CaseB() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_NoADAS_CaseB() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 6196, OutsideSegment, Accelerate), // len: 6196m (6196, 7628, OutsideSegment, Coast), // len: 1432m (7628, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_NoADAS_CaseC() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_NoADAS_CaseC() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 5496, OutsideSegment, Accelerate), // len: 5496m (5496, 5849, OutsideSegment, Coast), // len: 353m (5849, 7111, OutsideSegment, Brake), // len: 1262m @@ -75,7 +75,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E2_NoADAS_CaseD() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_NoADAS_CaseD() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 2147, OutsideSegment, Accelerate), // len: 2147m (2147, 2300, OutsideSegment, Coast), // len: 153m (2300, 2469, OutsideSegment, Brake), // len: 169m @@ -87,7 +87,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (6947, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_NoADAS_CaseE() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_NoADAS_CaseE() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 2194, OutsideSegment, Accelerate), // len: 2194m (2194, 2440, OutsideSegment, Coast), // len: 246m (2440, 3350, OutsideSegment, Accelerate), // len: 910m @@ -97,7 +97,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (4208, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_NoADAS_CaseF() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_NoADAS_CaseF() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 2206, OutsideSegment, Accelerate), // len: 2206m (2206, 2463, OutsideSegment, Coast), // len: 257m (2463, 2907, OutsideSegment, Accelerate), // len: 444m @@ -105,7 +105,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (3400, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_NoADAS_CaseG() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_NoADAS_CaseG() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 5437, OutsideSegment, Accelerate), // len: 5437m (5437, 5614, OutsideSegment, Coast), // len: 177m (5614, 6467, OutsideSegment, Brake), // len: 853m @@ -113,7 +113,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (6990, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_NoADAS_CaseH() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_NoADAS_CaseH() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 5332, OutsideSegment, Accelerate), // len: 5332m (5332, 5722, OutsideSegment, Coast), // len: 390m (5722, 5962, OutsideSegment, Brake), // len: 240m @@ -121,11 +121,11 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (6224, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_NoADAS_CaseI() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_NoADAS_CaseI() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_NoADAS_CaseJ() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_NoADAS_CaseJ() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 4794, OutsideSegment, Accelerate), // len: 4794m (4794, 4805, OutsideSegment, Roll), // len: 11m (4805, 4837, OutsideSegment, Accelerate), // len: 32m @@ -149,7 +149,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (6366, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_NoADAS_CrestCoast1() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_NoADAS_CrestCoast1() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 0, OutsideSegment, Halt), // len: 0m (0, 13, OutsideSegment, Accelerate), // len: 13m (13, 18, OutsideSegment, Roll), // len: 5m @@ -169,7 +169,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E2_NoADAS_CrestCoast2() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_NoADAS_CrestCoast2() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 0, OutsideSegment, Halt), // len: 0m (0, 13, OutsideSegment, Accelerate), // len: 13m (13, 18, OutsideSegment, Roll), // len: 5m @@ -189,14 +189,14 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E2_PCC123_CaseA() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC123_CaseA() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 4107, OutsideSegment, Accelerate), // len: 4107m (4107, 5566, WithinSegment, Accelerate), // len: 1459m (5566, 5834, UseCase1, Coast), // len: 268m (5834, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC123_CaseB() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC123_CaseB() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 4585, OutsideSegment, Accelerate), // len: 4585m (4585, 5682, WithinSegment, Accelerate), // len: 1097m (5682, 7315, UseCase1, Coast), // len: 1633m @@ -204,7 +204,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (7385, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC123_CaseC() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC123_CaseC() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3955, OutsideSegment, Accelerate), // len: 3955m (3955, 4982, WithinSegment, Accelerate), // len: 1027m (4982, 6112, UseCase1, Coast), // len: 1130m @@ -215,7 +215,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (7533, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC123_CaseD() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC123_CaseD() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 654, OutsideSegment, Accelerate), // len: 654m (654, 1949, WithinSegment, Accelerate), // len: 1295m (1949, 2483, UseCase1, Coast), // len: 534m @@ -228,7 +228,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (7007, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC123_CaseE() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC123_CaseE() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 689, OutsideSegment, Accelerate), // len: 689m (689, 2112, WithinSegment, Accelerate), // len: 1423m (2112, 2380, UseCase1, Coast), // len: 268m @@ -239,7 +239,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (4147, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC123_CaseF() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC123_CaseF() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 689, OutsideSegment, Accelerate), // len: 689m (689, 2124, WithinSegment, Accelerate), // len: 1435m (2124, 2403, UseCase1, Coast), // len: 279m @@ -248,7 +248,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (3286, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC123_CaseG() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC123_CaseG() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3932, OutsideSegment, Accelerate), // len: 3932m (3932, 5134, WithinSegment, Accelerate), // len: 1202m (5134, 5917, UseCase1, Coast), // len: 783m @@ -258,7 +258,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E2_PCC123_CaseH() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC123_CaseH() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3804, OutsideSegment, Accelerate), // len: 3804m (3804, 4982, WithinSegment, Accelerate), // len: 1178m (4982, 6011, UseCase1, Coast), // len: 1029m @@ -266,11 +266,11 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (6105, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC123_CaseI() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC123_CaseI() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC123_CaseJ() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC123_CaseJ() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3547, OutsideSegment, Accelerate), // len: 3547m (3547, 4794, WithinSegment, Accelerate), // len: 1247m (4794, 4805, WithinSegment, Roll), // len: 11m @@ -295,7 +295,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (6473, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC123_CrestCoast1() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC123_CrestCoast1() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 0, OutsideSegment, Halt), // len: 0m (0, 13, OutsideSegment, Accelerate), // len: 13m (13, 18, OutsideSegment, Roll), // len: 5m @@ -315,7 +315,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E2_PCC123_CrestCoast2() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC123_CrestCoast2() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 0, OutsideSegment, Halt), // len: 0m (0, 13, OutsideSegment, Accelerate), // len: 13m (13, 18, OutsideSegment, Roll), // len: 5m @@ -336,14 +336,14 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E2_PCC12_CaseA() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC12_CaseA() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 4107, OutsideSegment, Accelerate), // len: 4107m (4107, 5566, WithinSegment, Accelerate), // len: 1459m (5566, 5834, UseCase1, Coast), // len: 268m (5834, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC12_CaseB() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC12_CaseB() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 4585, OutsideSegment, Accelerate), // len: 4585m (4585, 5682, WithinSegment, Accelerate), // len: 1097m (5682, 7315, UseCase1, Coast), // len: 1633m @@ -351,7 +351,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (7385, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC12_CaseC() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC12_CaseC() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3955, OutsideSegment, Accelerate), // len: 3955m (3955, 4982, WithinSegment, Accelerate), // len: 1027m (4982, 6112, UseCase1, Coast), // len: 1130m @@ -362,7 +362,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (7418, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC12_CaseD() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC12_CaseD() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 654, OutsideSegment, Accelerate), // len: 654m (654, 1949, WithinSegment, Accelerate), // len: 1295m (1949, 2483, UseCase1, Coast), // len: 534m @@ -377,7 +377,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (6941, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC12_CaseE() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC12_CaseE() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 689, OutsideSegment, Accelerate), // len: 689m (689, 2112, WithinSegment, Accelerate), // len: 1423m (2112, 2380, UseCase1, Coast), // len: 268m @@ -388,7 +388,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (4147, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC12_CaseF() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC12_CaseF() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 689, OutsideSegment, Accelerate), // len: 689m (689, 2124, WithinSegment, Accelerate), // len: 1435m (2124, 2403, UseCase1, Coast), // len: 279m @@ -398,7 +398,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E2_PCC12_CaseG() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC12_CaseG() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3932, OutsideSegment, Accelerate), // len: 3932m (3932, 5134, WithinSegment, Accelerate), // len: 1202m (5134, 5917, UseCase1, Coast), // len: 783m @@ -409,7 +409,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (6980, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC12_CaseH() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC12_CaseH() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3804, OutsideSegment, Accelerate), // len: 3804m (3804, 4982, WithinSegment, Accelerate), // len: 1178m (4982, 6011, UseCase1, Coast), // len: 1029m @@ -419,11 +419,11 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E2_PCC12_CaseI() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC12_CaseI() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC12_CaseJ() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC12_CaseJ() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3547, OutsideSegment, Accelerate), // len: 3547m (3547, 4794, WithinSegment, Accelerate), // len: 1247m (4794, 4805, WithinSegment, Roll), // len: 11m @@ -450,7 +450,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (6365, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E2_PCC12_CrestCoast1() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC12_CrestCoast1() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 0, OutsideSegment, Halt), // len: 0m (0, 13, OutsideSegment, Accelerate), // len: 13m (13, 18, OutsideSegment, Roll), // len: 5m @@ -470,7 +470,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E2_PCC12_CrestCoast2() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E2_PCC12_CrestCoast2() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 0, OutsideSegment, Halt), // len: 0m (0, 13, OutsideSegment, Accelerate), // len: 13m (13, 18, OutsideSegment, Roll), // len: 5m @@ -494,7 +494,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS #region E3 [TestCase] - public void Class5_E3_PCC123_CaseA() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E3_PCC123_CaseA() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 4130, OutsideSegment, Accelerate), // len: 4130m (4130, 5531, WithinSegment, Accelerate), // len: 1401m (5531, 5810, UseCase1, Coast), // len: 279m @@ -502,7 +502,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E3_PCC123_CaseB() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E3_PCC123_CaseB() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 4655, OutsideSegment, Accelerate), // len: 4655m (4655, 5612, WithinSegment, Accelerate), // len: 957m (5612, 7240, UseCase1, Coast), // len: 1628m @@ -511,7 +511,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E3_PCC123_CaseC() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E3_PCC123_CaseC() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3979, OutsideSegment, Accelerate), // len: 3979m (3979, 4971, WithinSegment, Accelerate), // len: 992m (4971, 6090, UseCase1, Coast), // len: 1119m @@ -522,7 +522,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (7548, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E3_PCC123_CaseD() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E3_PCC123_CaseD() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 654, OutsideSegment, Accelerate), // len: 654m (654, 1926, WithinSegment, Accelerate), // len: 1272m (1926, 2479, UseCase1, Coast), // len: 553m @@ -535,7 +535,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (7046, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E3_PCC123_CaseE() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E3_PCC123_CaseE() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 700, OutsideSegment, Accelerate), // len: 700m (700, 2101, WithinSegment, Accelerate), // len: 1401m (2101, 2379, UseCase1, Coast), // len: 278m @@ -547,7 +547,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (4152, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E3_PCC123_CaseF() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E3_PCC123_CaseF() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 700, OutsideSegment, Accelerate), // len: 700m (700, 2112, WithinSegment, Accelerate), // len: 1412m (2112, 2391, UseCase1, Coast), // len: 279m @@ -558,7 +558,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (3321, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E3_PCC123_CaseG() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E3_PCC123_CaseG() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3944, OutsideSegment, Accelerate), // len: 3944m (3944, 5122, WithinSegment, Accelerate), // len: 1178m (5122, 5893, UseCase1, Coast), // len: 771m @@ -568,7 +568,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E3_PCC123_CaseH() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E3_PCC123_CaseH() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3815, OutsideSegment, Accelerate), // len: 3815m (3815, 4947, WithinSegment, Accelerate), // len: 1132m (4947, 5996, UseCase1, Coast), // len: 1049m @@ -576,11 +576,11 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (6125, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E3_PCC123_CaseI() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E3_PCC123_CaseI() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E3_PCC123_CaseJ() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E3_PCC123_CaseJ() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3559, OutsideSegment, Accelerate), // len: 3559m (3559, 5374, WithinSegment, Accelerate), // len: 1815m (5374, 5713, UseCase2, Coast), // len: 339m @@ -589,7 +589,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (6477, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E3_PCC123_CrestCoast1() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E3_PCC123_CrestCoast1() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 0, OutsideSegment, Halt), // len: 0m (0, 3410, OutsideSegment, Accelerate), // len: 3410m (3410, 4441, OutsideSegment, Coast), // len: 1031m @@ -599,7 +599,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E3_PCC123_CrestCoast2() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E3_PCC123_CrestCoast2() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 0, OutsideSegment, Halt), // len: 0m (0, 3614, OutsideSegment, Accelerate), // len: 3614m (3614, 4148, OutsideSegment, Coast), // len: 534m @@ -612,7 +612,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS #region E4 [TestCase] - public void Class5_E4_PCC123_CaseA() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E4_PCC123_CaseA() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 4130, OutsideSegment, Accelerate), // len: 4130m (4130, 5531, WithinSegment, Accelerate), // len: 1401m (5531, 5810, UseCase1, Coast), // len: 279m @@ -621,7 +621,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E4_PCC123_CaseB() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E4_PCC123_CaseB() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 4655, OutsideSegment, Accelerate), // len: 4655m (4655, 5601, WithinSegment, Accelerate), // len: 946m (5601, 7252, UseCase1, Coast), // len: 1651m @@ -629,7 +629,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (7522, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E4_PCC123_CaseC() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E4_PCC123_CaseC() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3979, OutsideSegment, Accelerate), // len: 3979m (3979, 4959, WithinSegment, Accelerate), // len: 980m (4959, 6088, UseCase1, Coast), // len: 1129m @@ -640,7 +640,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (7523, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E4_PCC123_CaseD() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E4_PCC123_CaseD() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 654, OutsideSegment, Accelerate), // len: 654m (654, 1926, WithinSegment, Accelerate), // len: 1272m (1926, 2480, UseCase1, Coast), // len: 554m @@ -654,7 +654,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E4_PCC123_CaseE() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E4_PCC123_CaseE() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 689, OutsideSegment, Accelerate), // len: 689m (689, 2101, WithinSegment, Accelerate), // len: 1412m (2101, 2379, UseCase1, Coast), // len: 278m @@ -667,7 +667,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E4_PCC123_CaseF() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E4_PCC123_CaseF() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 700, OutsideSegment, Accelerate), // len: 700m (700, 2112, WithinSegment, Accelerate), // len: 1412m (2112, 2391, UseCase1, Coast), // len: 279m @@ -678,7 +678,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (3320, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E4_PCC123_CaseG() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E4_PCC123_CaseG() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3941, OutsideSegment, Accelerate), // len: 3941m (3941, 5117, WithinSegment, Accelerate), // len: 1176m (5117, 5888, UseCase1, Coast), // len: 771m @@ -689,7 +689,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS [TestCase] - public void Class5_E4_PCC123_CaseH() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E4_PCC123_CaseH() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3815, OutsideSegment, Accelerate), // len: 3815m (3815, 4936, WithinSegment, Accelerate), // len: 1121m (4936, 5994, UseCase1, Coast), // len: 1058m @@ -697,11 +697,11 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (6135, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E4_PCC123_CaseI() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E4_PCC123_CaseI() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E4_PCC123_CaseJE4() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E4_PCC123_CaseJE4() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 3430, OutsideSegment, Accelerate), // len: 3430m (3430, 5236, WithinSegment, Accelerate), // len: 1806m (5236, 6125, UseCase2, Coast), // len: 889m @@ -710,7 +710,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (6531, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E4_PCC123_CrestCoast1() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E4_PCC123_CrestCoast1() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 0, OutsideSegment, Halt), // len: 0m (0, 3417, OutsideSegment, Accelerate), // len: 3417m (3417, 4400, OutsideSegment, Coast), // len: 983m @@ -719,7 +719,7 @@ namespace TUGraz.VectoCore.Tests.Integration.ADAS (5422, 1e6, OutsideSegment, Accelerate)); [TestCase] - public void Class5_E4_PCC123_CrestCoast2() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).JoinString("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), + public void Class5_E4_PCC123_CrestCoast2() => TestPCC(MethodBase.GetCurrentMethod().Name.Split('_').Slice(0, -1).Join("_"), MethodBase.GetCurrentMethod().Name.Split('_').Last(), (0, 0, OutsideSegment, Halt), // len: 0m (0, 3612, OutsideSegment, Accelerate), // len: 3612m (3612, 4126, OutsideSegment, Coast), // len: 514m diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs index 255c280cec46a2ce71ce3acdbeb32a865f1be010..5719c0f557702d7b5f36f2b8aa9bad7d8f440933 100644 --- a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs +++ b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs @@ -2022,11 +2022,11 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration Assert.AreEqual(missionType, m.MissionType); Assert.AreEqual(cosswindCorrection, m.CrossWindCorrectionParameters); CollectionAssert.AreEqual(axleWeightDistribution, m.AxleWeightDistribution, - "Axle distribution not equal.\nexpected: {0}\nactual: {1}", string.Join(",", axleWeightDistribution), - string.Join(",", m.AxleWeightDistribution)); + "Axle distribution not equal.\nexpected: {0}\nactual: {1}", axleWeightDistribution.Join(), + m.AxleWeightDistribution.Join()); CollectionAssert.AreEqual(trailerAxleWeightDistribution, m.Trailer.Select(t => t.TrailerAxleWeightShare), - "Trailer axle distribution not equal.\nexpected: {0}\nactual: {1}", string.Join(",", trailerAxleWeightDistribution), - string.Join(",", m.Trailer.Select(t => t.TrailerAxleWeightShare))); + "Trailer axle distribution not equal.\nexpected: {0}\nactual: {1}", trailerAxleWeightDistribution.Join(), + m.Trailer.Select(t => t.TrailerAxleWeightShare).Join()); Assert.AreEqual(bodyCurbWeight.SI<Kilogram>(), m.BodyCurbWeight); CollectionAssert.AreEqual(trailerCurbWeight, m.Trailer.Select(t => t.TrailerCurbWeight.Value())); CollectionAssert.AreEqual(trailerType, m.Trailer.Select(t => t.TrailerType)); diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationSegmentHeavyBusesTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationSegmentHeavyBusesTest.cs index c3c33b3ec2e8f52f664eaf1b905818559b3185a9..82a3184342d45b4a026f0749cc96f08cb5de70d8 100644 --- a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationSegmentHeavyBusesTest.cs +++ b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationSegmentHeavyBusesTest.cs @@ -691,8 +691,8 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration Assert.AreEqual(lowLoad, m.LowLoad.Value(), 1e-9); foreach (var tuple in axleWeightDistribution.ZipAll(m.AxleWeightDistribution, Tuple.Create)) { - Assert.AreEqual(tuple.Item1, tuple.Item2, 1e-0, "Axle distribution not equal.\nexpected: {0}\nactual: {1}", string.Join(",", axleWeightDistribution), - string.Join(",", m.AxleWeightDistribution)); + Assert.AreEqual(tuple.Item1, tuple.Item2, 1e-0, "Axle distribution not equal.\nexpected: {0}\nactual: {1}", + axleWeightDistribution.Join(), m.AxleWeightDistribution.Join()); } foreach (var entry in expVehicleEquipment) { diff --git a/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs index 44b0a43b6ac6726bf8df11e32b6e54ff7962b3fa..903e9647042fbe3c496db25bff2c83829bac18be 100644 --- a/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs +++ b/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs @@ -842,7 +842,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration InputDataHelper.InputDataAsStream("engine torque,downshift rpm [rpm],upshift rpm [rpm] ", vgbs))); var results = shiftPolygon.Validate(ExecutionMode.Engineering, VectoSimulationJobType.ConventionalVehicle, null, GearboxType.MT, false); - Assert.IsFalse(results.Any(), string.Join("\n", results.Select(r => r.ErrorMessage))); + Assert.IsFalse(results.Any(), results.Select(r => r.ErrorMessage).Join("\n")); } [ diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/BatterySystemTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/BatterySystemTest.cs index 85cd34b222187ff93ef7467c77c533a509673bc0..e513e94a440b4aa7eab2f3fe06ec21d4a9504f73 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponent/BatterySystemTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/BatterySystemTest.cs @@ -166,7 +166,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent } var socs = bat.Batteries.SelectMany(x => x.Value.Batteries.Select(y => y.StateOfCharge)).ToArray(); - Console.WriteLine(string.Join(", ", socs)); + Console.WriteLine(socs.Join()); for (var i = 0; i < socs.Length; i++) { Assert.AreEqual(expectedSoC[i], socs[i], 1e-9, $"Bat_{i} SoC"); } @@ -234,7 +234,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent } var socs = bat.Batteries.SelectMany(x => x.Value.Batteries.Select(y => y.StateOfCharge)).ToArray(); - Console.WriteLine(string.Join(", ", socs)); + Console.WriteLine(socs.Join()); Console.WriteLine(bat.StateOfCharge); for (var i = 0; i < socs.Length; i++) { Assert.AreEqual(expectedSoC[i], socs[i], 1e-9, $"Bat_{i} SoC"); @@ -303,7 +303,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent } var socs = bat.Batteries.SelectMany(x => x.Value.Batteries.Select(y => y.StateOfCharge)).ToArray(); - Console.WriteLine(string.Join(", ", socs)); + Console.WriteLine(socs.Join()); Console.WriteLine(bat.StateOfCharge); for (var i = 0; i < socs.Length; i++) { Assert.AreEqual(expectedSoC[i], socs[i], 1e-9, $"Bat_{i} SoC"); diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs index 16602da9dbe35b5e12238133fd183d234bb87e5b..2857d8a00c0d5542be77ea0d7d6a5a3fc90068e3 100644 --- a/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs +++ b/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs @@ -108,7 +108,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData data.FullLoadCurves[0].EngineData = data; var results = data.Validate(ExecutionMode.Declaration, VectoSimulationJobType.ConventionalVehicle, null, null, false); - Assert.IsFalse(results.Any(), "Validation Failed: " + string.Join("; ", results.Select(r => r.ErrorMessage))); + Assert.IsFalse(results.Any(), "Validation Failed: " + results.Select(r => r.ErrorMessage).Join("; ")); Assert.IsTrue(data.IsValid()); } @@ -144,7 +144,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData var engineData = dao.CreateEngineData(data, data.EngineModes.First()); var results = engineData.Validate(ExecutionMode.Engineering, VectoSimulationJobType.ConventionalVehicle, null, null, false); - Assert.IsFalse(results.Any(), "Validation failed: " + string.Join("; ", results.Select(r => r.ErrorMessage))); + Assert.IsFalse(results.Any(), "Validation failed: " + results.Select(r => r.ErrorMessage).Join("; ")); Assert.IsTrue(engineData.IsValid()); } @@ -190,7 +190,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData var engineData = dao.CreateEngineData(vehicle, data.EngineModes.First(), new Mission() {MissionType = MissionType.LongHaul}); var results = engineData.Validate(ExecutionMode.Declaration, VectoSimulationJobType.ConventionalVehicle, null, null, false); - Assert.IsFalse(results.Any(), "Validation failed: " + string.Join("; ", results.Select(r => r.ErrorMessage))); + Assert.IsFalse(results.Any(), "Validation failed: " + results.Select(r => r.ErrorMessage).Join("; ")); Assert.IsTrue(engineData.IsValid()); } @@ -360,8 +360,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData // every field and property should be tested except private parent fields and properties and // (4*4+1) * 2 = 17*2= 34 - 4 private parent fields (+2 public field and property which are tested twice) = 32 - Assert.AreEqual(32, results.Count, - "Validation Error: " + string.Join("\n_eng_avg", results.Select(r => r.ErrorMessage))); + Assert.AreEqual(32, results.Count, "Validation Error: " + results.Select(r => r.ErrorMessage).Join("\n_eng_avg")); } [TestCase] diff --git a/VectoCore/VectoCoreTest/Utils/ResultFileHelper.cs b/VectoCore/VectoCoreTest/Utils/ResultFileHelper.cs index 0f36502f3b8efbee0ad36d1a5def5c7588bf7733..1502ea3b16f11c38cd862afb1315dc73abd8879a 100644 --- a/VectoCore/VectoCoreTest/Utils/ResultFileHelper.cs +++ b/VectoCore/VectoCoreTest/Utils/ResultFileHelper.cs @@ -107,10 +107,11 @@ namespace TUGraz.VectoCore.Tests.Utils } CollectionAssert.AreEqual(expectedCols, actualCols, - string.Format("Moddata {3}: Columns differ:\nExpected: {0}\nMissing:{1},\nToo Much:{2}", - string.Join(", ", expectedCols), - string.Join(", ", expectedCols.Except(actualCols)), - string.Join(", ", actualCols.Except(expectedCols)), result.actualFile)); + "Moddata {0}: Columns differ:\nExpected: {1}\nMissing:{2},\nToo Much:{3}", + result.actualFile, + expectedCols.Join(), + expectedCols.Except(actualCols).Join(), + actualCols.Except(expectedCols).Join()); for (var i = 0; testRowcount && i < expected.Rows.Count; i++) { var expectedRow = expected.Rows[i]; @@ -138,11 +139,11 @@ namespace TUGraz.VectoCore.Tests.Utils var expectedCols = expected.Columns.Cast<DataColumn>().Select(x => x.ColumnName).OrderBy(x => x).ToList(); CollectionAssert.AreEqual(expectedCols, actualCols, - string.Format("SUM FILE {3}: Columns differ:\nExpected: {0}\nMissing:{1},\nToo Much:{2}", - string.Join(", ", expectedCols), - string.Join(", ", expectedCols.Except(actualCols)), - string.Join(", ", actualCols.Except(expectedCols)), - actualFile)); + "SUM FILE {0}: Columns differ:\nExpected: {1}\nMissing:{2},\nToo Much:{3}", + actualFile, + expectedCols.Join(), + expectedCols.Except(actualCols).Join(), + actualCols.Except(expectedCols).Join()); for (var i = 0; i < expected.Rows.Count; i++) { var expectedRow = expected.Rows[i]; diff --git a/VectoCore/VectoCoreTest/Utils/VectoMathTest.cs b/VectoCore/VectoCoreTest/Utils/VectoMathTest.cs index 2d7f9c6d95b31809e94156acf6b966d23889ec42..630a838fffdf4b504afecfbdc546bb7f2c53ab13 100644 --- a/VectoCore/VectoCoreTest/Utils/VectoMathTest.cs +++ b/VectoCore/VectoCoreTest/Utils/VectoMathTest.cs @@ -119,7 +119,7 @@ namespace TUGraz.VectoCore.Tests.Utils { var results = VectoMath.Polynom4Solver(a, b, c, d, e); - Console.WriteLine(string.Join(", ", results)); + Console.WriteLine(results.Join()); Assert.AreEqual(expected.Length, results.Length); diff --git a/VectoCore/VectoCoreTest/XML/XMLReportTest.cs b/VectoCore/VectoCoreTest/XML/XMLReportTest.cs index d88ce535c17b527c5cc484ba83803e2f8543feb9..7f595f7ff669ceee478fa43a87c1ccb87ba0812c 100644 --- a/VectoCore/VectoCoreTest/XML/XMLReportTest.cs +++ b/VectoCore/VectoCoreTest/XML/XMLReportTest.cs @@ -35,6 +35,7 @@ using System.Xml; using Ninject; using NUnit.Framework; using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML; using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.OutputData; @@ -96,13 +97,13 @@ namespace TUGraz.VectoCore.Tests.XML var validator1 = new XMLValidator(XmlReader.Create(customerRecord), validationErrorAction: (s,e) => { validationMsg1.Add(e?.ValidationEventArgs?.Message ?? "no schema found?"); }); - Assert.IsTrue(validator1.ValidateXML(XmlDocumentType.CustomerReport), string.Join("\n", validationMsg1)); + Assert.IsTrue(validator1.ValidateXML(XmlDocumentType.CustomerReport), validationMsg1.Join("\n")); var validationMsg2 = new List<string> {manufacturerRecord}; var validator2 = new XMLValidator(XmlReader.Create(manufacturerRecord), validationErrorAction: (s,e) => { validationMsg2.Add(e?.ValidationEventArgs?.Message ?? "no schema found"); }); - Assert.IsTrue(validator2.ValidateXML(XmlDocumentType.ManufacturerReport), string.Join("\n", validationMsg2)); + Assert.IsTrue(validator2.ValidateXML(XmlDocumentType.ManufacturerReport), validationMsg2.Join("\n")); } } } \ No newline at end of file