diff --git a/VectoCore/VectoCoreTest/Models/Simulation/PTOIdleLossTest.cs b/VectoCore/VectoCoreTest/Models/Simulation/PTOIdleLossTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..0ad29a8b0fcb659ec6cac1fcaf1c6b27188701f2 --- /dev/null +++ b/VectoCore/VectoCoreTest/Models/Simulation/PTOIdleLossTest.cs @@ -0,0 +1,85 @@ +/* +* This file is part of VECTO. +* +* Copyright © 2012-2016 European Union +* +* Developed by Graz University of Technology, +* Institute of Internal Combustion Engines and Thermodynamics, +* Institute of Technical Informatics +* +* VECTO is licensed under the EUPL, Version 1.1 or - as soon they will be approved +* by the European Commission - subsequent versions of the EUPL (the "Licence"); +* You may not use VECTO except in compliance with the Licence. +* You may obtain a copy of the Licence at: +* +* https://joinup.ec.europa.eu/community/eupl/og_page/eupl +* +* Unless required by applicable law or agreed to in writing, VECTO +* distributed under the Licence is distributed on an "AS IS" basis, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the Licence for the specific language governing permissions and +* limitations under the Licence. +* +* Authors: +* Stefan Hausberger, hausberger@ivt.tugraz.at, IVT, Graz University of Technology +* Christian Kreiner, christian.kreiner@tugraz.at, ITI, Graz University of Technology +* Michael Krisper, michael.krisper@tugraz.at, ITI, Graz University of Technology +* Raphael Luz, luz@ivt.tugraz.at, IVT, Graz University of Technology +* Markus Quaritsch, markus.quaritsch@tugraz.at, IVT, Graz University of Technology +* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology +*/ + +using System; +using System.Collections.Generic; +using NUnit.Framework; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Tests.Utils; + +namespace TUGraz.VectoCore.Tests.Models.Simulation +{ + [TestFixture] + public class PTOIdleLossTest + { + [TestCase] + public void PTOIdleLosses_FixPoints() + { + var entryList = new List<PTOIdleLossMap.Entry>(); + for (var i = 0; i < 2000; i += 200) { + entryList.Add(new PTOIdleLossMap.Entry { + EngineSpeed = i.RPMtoRad(), + PTOTorque = (Math.Sqrt(i) / 10).SI<NewtonMeter>() + }); + } + var pto = new PTOIdleLossMap(entryList.ToArray()); + + foreach (var entry in entryList) { + Assert.AreEqual(entry.PTOTorque, pto.GetTorqueLoss(entry.EngineSpeed)); + } + } + + [TestCase] + public void PTOIdleLosses_Interpolate() + { + var entryList = new List<PTOIdleLossMap.Entry>(); + for (var i = 0; i < 2000; i += 200) { + entryList.Add(new PTOIdleLossMap.Entry { + EngineSpeed = i.RPMtoRad(), + PTOTorque = (Math.Sqrt(i) / 10).SI<NewtonMeter>() + }); + } + var pto = new PTOIdleLossMap(entryList.ToArray()); + + for (var i = 1; i < entryList.Count; i++) { + var v1 = entryList[i - 1]; + var v2 = entryList[i]; + + for (var f = v1.EngineSpeed; f < v2.EngineSpeed; f += 10.RPMtoRad()) { + AssertHelper.AreRelativeEqual( + VectoMath.Interpolate(v1.EngineSpeed, v2.EngineSpeed, v1.PTOTorque, v2.PTOTorque, f), + pto.GetTorqueLoss(f)); + } + } + } + } +} \ No newline at end of file