diff --git a/VectoCore/Models/Connector/Ports/IResponse.cs b/VectoCore/Models/Connector/Ports/IResponse.cs index 4515ba0a9665328ead8f9224787deb2365d61dc0..1571ef893bc28120118860e274d93d6d6d10179a 100644 --- a/VectoCore/Models/Connector/Ports/IResponse.cs +++ b/VectoCore/Models/Connector/Ports/IResponse.cs @@ -14,9 +14,6 @@ * limitations under the Licence. */ -using System; -using System.Diagnostics; -using System.Security.Cryptography.X509Certificates; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.Models.Connector.Ports @@ -47,5 +44,7 @@ namespace TUGraz.VectoCore.Models.Connector.Ports Watt VehiclePowerRequest { get; set; } Watt BrakePower { get; set; } + + Second AbsTime { get; set; } } } \ No newline at end of file diff --git a/VectoCore/Models/Connector/Ports/Impl/Response.cs b/VectoCore/Models/Connector/Ports/Impl/Response.cs index 158794d5a93880efc1cef77845201a892e1841a8..d3e8bb679843a30e4b99f6a90dd5b494a58166c9 100644 --- a/VectoCore/Models/Connector/Ports/Impl/Response.cs +++ b/VectoCore/Models/Connector/Ports/Impl/Response.cs @@ -45,6 +45,8 @@ namespace TUGraz.VectoCore.Models.Connector.Ports.Impl public Watt BrakePower { get; set; } + public Second AbsTime { get; set; } + public object Source { get; set; } public override string ToString() @@ -92,7 +94,6 @@ namespace TUGraz.VectoCore.Models.Connector.Ports.Impl public class ResponseDrivingCycleDistanceExceeded : AbstractResponse { - public ResponseDrivingCycleDistanceExceeded() {} public Meter MaxDistance { get; set; } } diff --git a/VectoCore/Models/Simulation/Data/ModalResult.cs b/VectoCore/Models/Simulation/Data/ModalResult.cs index f8a0c01815b0a8a815001bd55aec2aec5bab63c2..071b2f33f2a3a004a7a53693be099080d85e2718 100644 --- a/VectoCore/Models/Simulation/Data/ModalResult.cs +++ b/VectoCore/Models/Simulation/Data/ModalResult.cs @@ -190,12 +190,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Data /// <summary> /// [km/h] Target vehicle speed. /// </summary> - [ModalResultField(typeof(SI), outputFactor: 3.6)] v_targ, + [ModalResultField(typeof(SI), caption: "v_targ [km/h]", outputFactor: 3.6)] v_targ, /// <summary> /// [m/s2] Vehicle acceleration. /// </summary> - [ModalResultField(typeof(SI), caption: "acc [m/s^2]")] acc, + [ModalResultField(typeof(SI), caption: "acc [m/s²]")] acc, /// <summary> /// [%] Road gradient. diff --git a/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs index d410b982de00ea0572b734858a8c8610850955b6..abbf86fb3502ad074bf1f91e66b91439631c050e 100644 --- a/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs +++ b/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs @@ -15,7 +15,6 @@ */ using System; -using System.Collections.Generic; using System.Linq; using TUGraz.VectoCore.Exceptions; using TUGraz.VectoCore.Models.Connector.Ports; diff --git a/VectoCore/Models/Simulation/Impl/TimeRun.cs b/VectoCore/Models/Simulation/Impl/TimeRun.cs index 453ee2f89393e57ebc00992897daa643ec42a457..01cd44bbabd5826415debdb8dee60cc013ec15ef 100644 --- a/VectoCore/Models/Simulation/Impl/TimeRun.cs +++ b/VectoCore/Models/Simulation/Impl/TimeRun.cs @@ -14,6 +14,8 @@ * limitations under the Licence. */ +using TUGraz.VectoCore.Configuration; +using TUGraz.VectoCore.Exceptions; using TUGraz.VectoCore.Models.Connector.Ports; using TUGraz.VectoCore.Models.Connector.Ports.Impl; using TUGraz.VectoCore.Utils; @@ -26,13 +28,36 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl protected override IResponse DoSimulationStep() { - var response = CyclePort.Request(AbsTime, dt); + var loopCount = 0; + IResponse response; + do { + response = CyclePort.Request(AbsTime, dt); + response.Switch(). + Case<ResponseSuccess>(). + Case<ResponseFailTimeInterval>(r => { + dt = r.SimulationInterval; + }). + Case<ResponseCycleFinished>(r => { + FinishedWithoutErrors = true; + Log.Info("========= Driving Cycle Finished"); + }). + Default(r => { + throw new VectoException("TimeRun got an unexpected response: {0}", r); + }); + if (loopCount++ > Constants.SimulationSettings.MaximumIterationCountForSimulationStep) { + throw new VectoSimulationException("Maximum iteration count for a single simulation interval reached! Aborting!"); + } + } while (!(response is ResponseSuccess || response is ResponseCycleFinished)); + return response; } protected override IResponse Initialize() { - return CyclePort.Initialize(); + Log.Info("Starting {0}", RunIdentifier); + var response = CyclePort.Initialize(); + AbsTime = response.AbsTime; + return response; } } } \ No newline at end of file diff --git a/VectoCore/Models/Simulation/Impl/VectoRun.cs b/VectoCore/Models/Simulation/Impl/VectoRun.cs index 79554950215f7f28c7e48dec857d704d0778f917..5998189ca76fdad7f4561a7929bff53d9f63dba3 100644 --- a/VectoCore/Models/Simulation/Impl/VectoRun.cs +++ b/VectoCore/Models/Simulation/Impl/VectoRun.cs @@ -20,7 +20,6 @@ using System.ComponentModel.DataAnnotations; using TUGraz.VectoCore.Exceptions; using TUGraz.VectoCore.Models.Connector.Ports; using TUGraz.VectoCore.Models.Connector.Ports.Impl; -using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.OutputData; using TUGraz.VectoCore.Utils; @@ -31,7 +30,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl /// </summary> public abstract class VectoRun : LoggingObject, IVectoRun { - private static uint _runIdCounter = 0; + private static uint _runIdCounter; protected Second AbsTime = 0.SI<Second>(); protected Second dt = 1.SI<Second>(); @@ -41,6 +40,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl [Required, ValidateObject] protected IVehicleContainer Container { get; set; } + public bool FinishedWithoutErrors { get; protected set; } public uint RunIdentifier { get; protected set; } diff --git a/VectoCore/Models/SimulationComponent/Impl/DistanceBasedDrivingCycle.cs b/VectoCore/Models/SimulationComponent/Impl/DistanceBasedDrivingCycle.cs index a9692440a8e7178115e0674530311f4d32aa4cf0..be0ae3dc568118efbfe5fbd4ffa833eabb3a79c3 100644 --- a/VectoCore/Models/SimulationComponent/Impl/DistanceBasedDrivingCycle.cs +++ b/VectoCore/Models/SimulationComponent/Impl/DistanceBasedDrivingCycle.cs @@ -210,12 +210,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl return null; } - /// <summary> - /// time request not implemented in distance based driving cycle (method <see cref="DriveTimeInterval"/> is used). - /// </summary> IResponse ISimulationOutPort.Request(Second absTime, Second dt) { - throw new NotImplementedException(); + throw new NotImplementedException("Distance Based Driving Cycle does not support time requests."); } IResponse ISimulationOutPort.Initialize() diff --git a/VectoCore/Models/SimulationComponent/Impl/PowertrainDrivingCycle.cs b/VectoCore/Models/SimulationComponent/Impl/PowertrainDrivingCycle.cs index 8a34c552aea9edd681ce862ee689327fea392f32..891fd62905e0d751142dd8a1be6d979c43b690df 100644 --- a/VectoCore/Models/SimulationComponent/Impl/PowertrainDrivingCycle.cs +++ b/VectoCore/Models/SimulationComponent/Impl/PowertrainDrivingCycle.cs @@ -14,7 +14,6 @@ * limitations under the Licence. */ -using System; using System.Collections.Generic; using System.Linq; using TUGraz.VectoCore.Exceptions; @@ -84,18 +83,40 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl IResponse ISimulationOutPort.Request(Second absTime, Second dt) { - var index = (int)absTime.Value(); - if (index >= Data.Entries.Count) { - return new ResponseCycleFinished(); + // interval exceeded + if ((absTime + dt).IsGreater(RightSample.Current.Time)) { + return new ResponseFailTimeInterval { + Source = this, + DeltaT = RightSample.Current.Time - absTime + }; } - AbsTime = absTime; - return NextComponent.Request(absTime, dt, Data.Entries[index].Torque, Data.Entries[index].AngularVelocity); + + // cycle finished (no more entries in cycle) + if (RightSample.Current == null) { + return new ResponseCycleFinished { Source = this }; + } + + var request = NextComponent.Request(absTime, dt, LeftSample.Current.Torque, LeftSample.Current.AngularVelocity); + request.Switch() + .Case<ResponseSuccess>(() => { + // if response successfull update internal AbsTime for DoCommit + AbsTime = absTime + dt; + }) + .Default(r => { + throw new UnexpectedResponseException("PowertrainDrivingCycle received an unexpected response.", r); + }); + + return request; } public IResponse Initialize() { - AbsTime = Data.Entries.First().Time; - return NextComponent.Initialize(Data.Entries.First().Torque, Data.Entries.First().AngularVelocity); + var first = Data.Entries.First(); + + AbsTime = first.Time; + var response = NextComponent.Initialize(first.Torque, first.AngularVelocity); + response.AbsTime = AbsTime; + return response; } public string CycleName @@ -108,12 +129,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl get { return AbsTime.Value() / Data.Entries.Last().Time.Value(); } } - - public Meter StartDistance - { - get { return 0.SI<Meter>(); } - } - #endregion #region ITnInPort @@ -131,7 +146,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl protected override void DoCommitSimulationStep() { - if (RightSample.MoveNext()) { + if (AbsTime.IsGreaterOrEqual(RightSample.Current.Time)) { + RightSample.MoveNext(); LeftSample.MoveNext(); } } @@ -149,8 +165,27 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl } } + /// <summary> + /// Driving Cycle for the PWheel driving cycle. + /// </summary> public class PWheelCycle : PowertrainDrivingCycle, IDriverInfo { + /// <summary> + /// Initializes a new instance of the <see cref="PWheelCycle"/> class. + /// </summary> + /// <param name="container">The container.</param> + /// <param name="cycle">The cycle.</param> + /// <param name="axleRatio">The axle ratio.</param> + /// <param name="gears">The gears.</param> + public PWheelCycle(IVehicleContainer container, DrivingCycleData cycle, double axleRatio, + IDictionary<uint, double> gears) : base(container, cycle) + { + foreach (var entry in Data.Entries) { + entry.AngularVelocity = entry.AngularVelocity / (axleRatio * gears[entry.Gear]); + entry.Torque = entry.PWheel / entry.AngularVelocity; + } + } + /// <summary> /// True if the angularVelocity at the wheels is 0. /// </summary> @@ -166,15 +201,5 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl { get { return DrivingBehavior.Driving; } } - - public PWheelCycle(IVehicleContainer container, DrivingCycleData cycle, double axleRatio, - IDictionary<uint, double> gears) : base(container, cycle) - { - gears[0] = 1; - foreach (var entry in Data.Entries) { - entry.AngularVelocity = entry.AngularVelocity / (axleRatio * gears[entry.Gear]); - entry.Torque = entry.PWheel / entry.AngularVelocity; - } - } } } \ No newline at end of file diff --git a/VectoCoreTest/Models/Simulation/AuxTests.cs b/VectoCoreTest/Models/Simulation/AuxTests.cs index 54ee63b08e9729afabeb8240b180520939cc216d..7b3f002e1e69b8077d9f3ae89187fc9de08a355a 100644 --- a/VectoCoreTest/Models/Simulation/AuxTests.cs +++ b/VectoCoreTest/Models/Simulation/AuxTests.cs @@ -83,12 +83,10 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation container.FinishSimulation(); sumWriter.Finish(); - //todo: add aux columns to test var testColumns = new[] { "Paux_FAN", "Paux_STP", "Paux_AC", "Paux_ES", "Paux_PS", "Paux" }; - ResultFileHelper.TestModFile( - @"TestData\Results\EngineOnlyCycles\40t_Long_Haul_Truck_Long_Haul_Empty Loading.vmod", - @"AuxWriteModFileSumFile.vmod", testColumns, testRowCount: false); + ResultFileHelper.TestModFile(@"TestData\Results\EngineOnlyCycles\40t_Long_Haul_Truck_Long_Haul_Empty Loading.vmod", + @"AuxWriteModFileSumFile.vmod", testColumns); ResultFileHelper.TestSumFile(@"TestData\Results\EngineOnlyCycles\40t_Long_Haul_Truck.vsum", @"AuxWriteModFileSumFile.vsum"); } diff --git a/VectoCoreTest/Models/Simulation/PwheelModeTests.cs b/VectoCoreTest/Models/Simulation/PwheelModeTests.cs index 8ee9fb2796575448c69083b6d2d2a2bc782acbe4..92f3c2d7241452198c11eceac4fe865433dac886 100644 --- a/VectoCoreTest/Models/Simulation/PwheelModeTests.cs +++ b/VectoCoreTest/Models/Simulation/PwheelModeTests.cs @@ -1,9 +1,17 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; -using TUGraz.VectoCore.InputData.FileIO.JSON; -using TUGraz.VectoCore.Models.Simulation.Impl; +using System.IO; +using System.Text; +using TUGraz.VectoCore.Utils; +using System.Collections.Generic; using TUGraz.VectoCore.OutputData; -using TUGraz.VectoCore.OutputData.FileIO; using TUGraz.VectoCore.Tests.Utils; +using TUGraz.VectoCore.InputData.Reader; +using TUGraz.VectoCore.Models.Simulation; +using TUGraz.VectoCore.OutputData.FileIO; +using TUGraz.VectoCore.InputData.FileIO.JSON; +using TUGraz.VectoCore.Models.Simulation.Impl; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Impl; namespace TUGraz.VectoCore.Tests.Models.Simulation { @@ -17,7 +25,32 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation [TestMethod] public void Pwheel_ReadCycle_Test() { - Assert.Fail("Test not implemented"); + IVehicleContainer container = new VehicleContainer(); + var inputData = @"<t>,<Pwheel>,<Gear>,<n>,<Padd> +1,89,2,1748,1.300 +2,120,2,1400,0.4"; + + Stream cycleFile = new MemoryStream(Encoding.UTF8.GetBytes(inputData)); + var drivingCycle = DrivingCycleDataReader.ReadFromStream(cycleFile, CycleType.PWheel); + var cycle = new PWheelCycle(container, drivingCycle, 2.3, new Dictionary<uint, double> { { 2, 3.5 } }); + + Assert.AreEqual(cycle.CycleData().LeftSample.Time, 1.SI<Second>()); + Assert.AreEqual(cycle.CycleData().RightSample.Time, 2.SI<Second>()); + + Assert.AreEqual(1748.RPMtoRad() / (2.3 * 3.5), cycle.CycleData().LeftSample.AngularVelocity); + Assert.AreEqual(1400.RPMtoRad() / (2.3 * 3.5), cycle.CycleData().RightSample.AngularVelocity); + + Assert.AreEqual(89.SI().Kilo.Watt, cycle.CycleData().LeftSample.PWheel); + Assert.AreEqual(120.SI().Kilo.Watt, cycle.CycleData().RightSample.PWheel); + + Assert.AreEqual(2u, cycle.CycleData().LeftSample.Gear); + Assert.AreEqual(2u, cycle.CycleData().RightSample.Gear); + + Assert.AreEqual(1300.SI<Watt>(), cycle.CycleData().LeftSample.AdditionalAuxPowerDemand); + Assert.AreEqual(400.SI<Watt>(), cycle.CycleData().RightSample.AdditionalAuxPowerDemand); + + Assert.AreEqual(89.SI().Kilo.Watt / (1748.RPMtoRad() / (2.3 * 3.5)), cycle.CycleData().LeftSample.Torque); + Assert.AreEqual(120.SI().Kilo.Watt / (1400.RPMtoRad() / (2.3 * 3.5)), cycle.CycleData().RightSample.Torque); } /// <summary> @@ -27,7 +60,15 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation [TestMethod] public void Pwheel_CreatePowertrain_Test() { - Assert.Fail("Test not implemented"); + var jobFile = @"TestData\Jobs\Pwheel.vecto"; + var fileWriter = new FileOutputWriter(jobFile); + var sumWriter = new SummaryDataContainer(fileWriter); + var jobContainer = new JobContainer(sumWriter); + + var inputData = JSONInputDataFactory.ReadJsonJob(jobFile); + var runsFactory = new SimulatorFactory(ExecutionMode.Engineering, inputData, fileWriter); + + jobContainer.AddRuns(runsFactory); } /// <summary> @@ -60,14 +101,10 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation jobContainer.WaitFinished(); - //todo MK-2016-01-20: add sumdata file for pwheel mode tests. ResultFileHelper.TestSumFile(@"TestData\Results\Pwheel\Atego_ges.v2.vsum", @"TestData\Jobs\Pwheel.vsum"); - //todo MK-2016-01-20: add moddata file for pwheel mode tests. ResultFileHelper.TestModFile(@"TestData\Results\Pwheel\Atego_ges_Gear2_pt1_rep1_actual.vmod", - @"TestData\Jobs\Pwheel.vmod"); - - Assert.Fail("Test not implemented"); + @"TestData\Jobs\Pwheel_Gear2_pt1_rep1_actual.vmod"); } } } \ No newline at end of file diff --git a/VectoCoreTest/TestData/Results/Pwheel/Atego_ges.v2.vsum b/VectoCoreTest/TestData/Results/Pwheel/Atego_ges.v2.vsum index e09f4b7aee424a5fff1fec210d91736fb7609fbe..191550fffd4da95773b413155af443d6dcbf9910 100644 --- a/VectoCoreTest/TestData/Results/Pwheel/Atego_ges.v2.vsum +++ b/VectoCoreTest/TestData/Results/Pwheel/Atego_ges.v2.vsum @@ -1,2 +1,2 @@ -Job [-],Input File [-],Cycle [-],time [s],distance [km],speed [km/h],∆altitude [m],Ppos [kW],Pneg [kW],FC-Map [g/h],FC-Map [g/km],FC-AUXc [g/h],FC-AUXc [g/km],FC-WHTCc [g/h],FC-WHTCc [g/km],CO2 [g/km],CO2 [g/tkm],FC-Final [g/km],FC-Final [l/100tkm],FC-Final [l/100km],PwheelPos [kW],Pbrake [kW],EposICE [kWh],EnegICE [kWh],Eair [kWh],Eroll [kWh],Egrad [kWh],Eacc [kWh],Eaux [kWh],Ebrake [kWh],Etransm [kWh],Eretarder [kWh],Etorqueconv [kWh],Mass [kg],Loading [kg],a [m/s^2],a_pos [m/s^2],a_neg [m/s^2],Acc.Noise [m/s^2],pAcc [%],pDec [%],pCruise [%],pStop [%] -1,Atego_ges.vecto,Gear2_pt1_rep1_actual.vdri,1,-,-,-,93.5667266845703,0,19058.18,-,-,-,-,-,-,-,-,-,-,89.0198287963867,0,0.0259907574123806,0,0,0,0,0,0,0,-0.00126302613152398,0,0,12000,0,0,0,0,0,0,0,0,0 +Job [-],Input File [-],Cycle [-],Status,time [s],distance [km],speed [km/h],∆altitude [m],Ppos [kW],Pneg [kW],FC-Map [g/h],FC-Map [g/km],FC-AUXc [g/h],FC-AUXc [g/km],FC-WHTCc [g/h],FC-WHTCc [g/km],CO2 [g/km],CO2 [g/tkm],FC-Final [g/km],FC-Final [l/100tkm],FC-Final [l/100km],PwheelPos [kW],Pbrake [kW],EposICE [kWh],EnegICE [kWh],Eair [kWh],Eroll [kWh],Egrad [kWh],Eacc [kWh],Eaux [kWh],Ebrake [kWh],Etransm [kWh],Eretarder [kWh],Etorqueconv [kWh],Mass [kg],Loading [kg],a [m/s^2],a_pos [m/s^2],a_neg [m/s^2],Acc.Noise [m/s^2],pAcc [%],pDec [%],pCruise [%],pStop [%] +1,Atego_ges.vecto,Gear2_pt1_rep1_actual.vdri,Success,1,-,-,-,93.5667266845703,0,19058.18,-,-,-,-,-,-,-,-,-,-,89.0198287963867,0,0.0259907574123806,0,0,0,0,0,0,0,-0.00126302613152398,0,0,12000,0,0,0,0,0,0,0,0,0 diff --git a/VectoCoreTest/TestData/Results/Pwheel/Atego_ges_Gear2_pt1_rep1_actual.vmod b/VectoCoreTest/TestData/Results/Pwheel/Atego_ges_Gear2_pt1_rep1_actual.vmod index 9db4a17656d32ae4d9d8a8a5c757852cd03d40b6..40c72ede20808c779c3aecd08f3f01a54c55457b 100644 --- a/VectoCoreTest/TestData/Results/Pwheel/Atego_ges_Gear2_pt1_rep1_actual.vmod +++ b/VectoCoreTest/TestData/Results/Pwheel/Atego_ges_Gear2_pt1_rep1_actual.vmod @@ -1,2 +1,2 @@ -time [s],dist [m],v_act [km/h],v_targ [km/h],acc [m/s²],grad [%],n [1/min],Tq_eng [Nm],Tq_clutch [Nm],Tq_full [Nm],Tq_drag [Nm],Pe_eng [kW],Pe_full [kW],Pe_drag [kW],Pe_clutch [kW],Pa Eng [kW],Paux [kW],Gear [-],Ploss GB [kW],Ploss Diff [kW],Ploss Retarder [kW],Pa GB [kW],Pa Veh [kW],Proll [kW],Pair [kW],Pgrad [kW],Pwheel [kW],Pbrake [kW],FC-Map [g/h],FC-AUXc [g/h],FC-WHTCc [g/h] -1.5,-,-,-,-,0,1748.324,511.0588,511.0588,838.134,-102.6453,93.56673,153.449,-18.79272,93.56673,0,0,2,2.408721,2.138174,0,0,0,0,0,0,89.01983,0,19058.18,-,- +time [s],dt [s],dist [m],v_act [km/h],v_targ [km/h],acc [m/s²],grad [%],n [1/min],Tq_eng [Nm],Tq_clutch [Nm],Tq_full [Nm],Tq_drag [Nm],Pe_eng [kW],Pe_full [kW],Pe_drag [kW],Pe_clutch [kW],Pa Eng [kW],Paux [kW],Gear [-],Ploss GB [kW],Ploss Diff [kW],Ploss Retarder [kW],Pa GB [kW],Pa Veh [kW],Proll [kW],Pair [kW],Pgrad [kW],Pwheel [kW],Pbrake [kW],FC-Map [g/h],FC-AUXc [g/h],FC-WHTCc [g/h] +1.5,1,-,-,-,-,0,1748.324,511.0588,511.0588,838.134,-102.6453,93.56673,153.449,-18.79272,93.56673,0,0,2,2.408721,2.138174,0,0,0,0,0,0,89.01983,0,19058.18,-,- diff --git a/VectoCoreTest/Utils/ResultFileHelper.cs b/VectoCoreTest/Utils/ResultFileHelper.cs index 62b68d35ad97f388f5c8295acd41bcca98857250..ccebfbc54abfd416a9e8d2068fb20ede8a83d190 100644 --- a/VectoCoreTest/Utils/ResultFileHelper.cs +++ b/VectoCoreTest/Utils/ResultFileHelper.cs @@ -82,7 +82,7 @@ namespace TUGraz.VectoCore.Tests.Utils var expectedCols = expected.Columns.Cast<DataColumn>().Select(x => x.ColumnName).OrderBy(x => x).ToList(); Assert.IsTrue(expectedCols.SequenceEqual(actualCols), - string.Format("Moddata: Columns differ:\nExpected: {0}\nActual: {1}", string.Join(", ", expectedCols), + string.Format("SUM FILE: Columns differ:\nExpected: {0}\nActual: {1}", string.Join(", ", expectedCols), string.Join(", ", actualCols))); for (var i = 0; i < expected.Rows.Count; i++) {