Newer
Older

Michael KRISPER
committed
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;

Markus Quaritsch
committed
using TUGraz.VectoCore.FileIO.Reader;
using TUGraz.VectoCore.FileIO.Reader.Impl;
using TUGraz.VectoCore.Models.Simulation.Data;
using TUGraz.VectoCore.Models.Simulation.Impl;
using TUGraz.VectoCore.Models.SimulationComponent.Data;
using TUGraz.VectoCore.Models.SimulationComponent.Impl;
using TUGraz.VectoCore.Tests.Utils;
using TUGraz.VectoCore.Utils;
namespace TUGraz.VectoCore.Tests.Integration.EngineOnlyCycle
{

Michael KRISPER
committed
[TestClass]
public class EngineOnlyCycleTest
{
private const string EngineFile = @"TestData\Components\24t Coach.veng";
public TestContext TestContext { get; set; }

Michael KRISPER
committed
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\TestData\\EngineTests.csv",
"EngineTests#csv", DataAccessMethod.Sequential)]
[TestMethod]
public void TestEngineOnlyDrivingCycle()
{

Markus Quaritsch
committed
var data = DrivingCycleDataReader.ReadFromFileEngineOnly(TestContext.DataRow["CycleFile"].ToString());
var container = new VehicleContainer(null, null);
var cycle = new MockDrivingCycle(container, data);

Michael KRISPER
committed
var expectedResults = ModalResults.ReadFromFile(TestContext.DataRow["ModalResultFile"].ToString());

Markus Quaritsch
committed

Michael KRISPER
committed
var vehicle = new VehicleContainer();
var engineData =
EngineeringModeSimulationDataReader.CreateEngineDataFromFile(TestContext.DataRow["EngineFile"].ToString());

Michael KRISPER
committed
var aux = new Auxiliary(vehicle);
aux.AddDirect(cycle);

Michael KRISPER
committed
var gearbox = new EngineOnlyGearbox(vehicle);

Michael KRISPER
committed
var engine = new CombustionEngine(vehicle, engineData);
aux.InPort().Connect(engine.OutPort());
gearbox.InPort().Connect(aux.OutPort());
var port = aux.OutPort();

Markus Quaritsch
committed
// IVectoJob job = SimulationFactory.CreateTimeBasedEngineOnlyRun(TestContext.DataRow["EngineFile"].ToString(),

Markus Quaritsch
committed
// TestContext.DataRow["CycleFile"].ToString(), "test2.csv");

Markus Quaritsch
committed
var absTime = 0.SI<Second>();
var dt = 1.SI<Second>();

Michael KRISPER
committed
var dataWriter = new MockModalDataWriter();

Michael KRISPER
committed
var i = 0;
var results = new[] {
ModalResultField.n, ModalResultField.PaEng, ModalResultField.Tq_drag, ModalResultField.Pe_drag,
ModalResultField.Pe_eng, ModalResultField.Tq_eng, ModalResultField.Tq_full, ModalResultField.Pe_full
};
//, ModalResultField.FC };

Markus Quaritsch
committed
//var siFactor = new[] { 1, 1000, 1, 1000, 1000, 1, 1, 1000, 1 };
//var tolerances = new[] { 0.0001, 0.1, 0.0001, 0.1, 0.1, 0.001, 0.001, 0.1, 0.01 };

Michael KRISPER
committed
foreach (var cycleEntry in data.Entries) {
port.Request(absTime, dt, cycleEntry.EngineTorque, cycleEntry.EngineSpeed);

Michael KRISPER
committed
foreach (var sc in vehicle.SimulationComponents()) {
sc.CommitSimulationStep(dataWriter);
}
// TODO: handle initial state of engine
var row = expectedResults.Rows[i++];
if (i > 2) {
for (var j = 0; j < results.Length; j++) {
var field = results[j];
Assert.AreEqual(row.Field<SI>(field.GetName()).Value(), dataWriter.Field<SI>(field).Value(), 0.0001,
string.Format("t: {0} field: {1}", i, field));

Michael KRISPER
committed
}
if (double.IsNaN(row.Field<SI>(ModalResultField.FCMap.GetName()).Value())) {
Assert.IsTrue(double.IsNaN(dataWriter.Field<SI>(ModalResultField.FCMap).Value()));

Michael KRISPER
committed
} else {
Assert.AreEqual(row.Field<SI>(ModalResultField.FCMap.GetName()).Value(),
dataWriter.Field<SI>(ModalResultField.FCMap).Value(),
0.01, "t: {0} field: {1}", i, ModalResultField.FCMap);

Michael KRISPER
committed
}
}
dataWriter.CommitSimulationStep(absTime, dt);
absTime += dt;
}
dataWriter.Data.WriteToFile(string.Format("result_{0}.csv", TestContext.DataRow["TestName"]));

Michael KRISPER
committed
}
[TestMethod]
public void AssembleEngineOnlyPowerTrain()
{
var dataWriter = new MockModalDataWriter();

Michael KRISPER
committed
var vehicleContainer = new VehicleContainer();
var gearbox = new EngineOnlyGearbox(vehicleContainer);
var engine = new CombustionEngine(vehicleContainer,
EngineeringModeSimulationDataReader.CreateEngineDataFromFile(EngineFile));

Michael KRISPER
committed
gearbox.InPort().Connect(engine.OutPort());

Michael KRISPER
committed

Markus Quaritsch
committed
var absTime = 0.SI<Second>();
var dt = 1.SI<Second>();

Michael KRISPER
committed
var angularVelocity = 644.4445.RPMtoRad();
var power = 2329.973.SI<Watt>();
gearbox.OutPort().Request(absTime, dt, Formulas.PowerToTorque(power, angularVelocity), angularVelocity);

Michael KRISPER
committed
foreach (var sc in vehicleContainer.SimulationComponents()) {
sc.CommitSimulationStep(dataWriter);
}
Assert.IsNotNull(dataWriter.CurrentRow);
}
}