From dc3559a451ed0f7e8d8ec605fc3aa25f8403f244 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Mon, 8 Aug 2016 13:02:16 +0200
Subject: [PATCH] update tests due to changes in vecto core

---
 .../Integration/CoachAdvancedAuxPowertrain.cs |  26 +--
 .../Integration/CoachPowerTrain.cs            |  27 ++-
 .../SimulationRuns/FullPowertrain.cs          |  63 +++---
 .../SimulationRuns/MinimalPowertrain.cs       |  50 ++---
 .../Integration/Truck40tPowerTrain.cs         |  23 +--
 .../Models/SimulationComponent/ClutchTest.cs  |   6 +-
 .../CombustionEngineTest.cs                   |   8 +-
 .../Models/SimulationComponent/DriverTest.cs  |  12 +-
 .../TorqueConverterDataTest.cs                | 192 +++++++++++++++---
 .../TestData/Components/AT_GBX/Gearbox.vgbx   |   2 +-
 .../Components/AT_GBX/TorqueConverter.vtcc    |  29 ++-
 VectoCore/VectoCoreTest/Utils/MockGearbox.cs  |   8 +-
 .../VectoCoreTest/Utils/MockIdleController.cs |   4 +-
 VectoCore/VectoCoreTest/Utils/MockPorts.cs    |  33 +--
 14 files changed, 306 insertions(+), 177 deletions(-)

diff --git a/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs b/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs
index a0f7f95359..bc4a4b808f 100644
--- a/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs
+++ b/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs
@@ -44,6 +44,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Impl;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Utils;
+using TUGraz.VectoCore.Utils;
 using Wheels = TUGraz.VectoCore.Models.SimulationComponent.Impl.Wheels;
 
 namespace TUGraz.VectoCore.Tests.Integration
@@ -85,27 +86,22 @@ namespace TUGraz.VectoCore.Tests.Integration
 
 			var cycle = new DistanceBasedDrivingCycle(container, cycleData);
 			var engine = new CombustionEngine(container, engineData);
-			var clutch = new Clutch(container, engineData, engine.IdleController);
-
-			dynamic tmp = Port.AddComponent(cycle, new Driver(container, driverData, new DefaultDriverStrategy()));
-			tmp = Port.AddComponent(tmp, new Vehicle(container, vehicleData));
-			tmp = Port.AddComponent(tmp, new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia));
-			tmp = Port.AddComponent(tmp, new Brakes(container));
-			tmp = Port.AddComponent(tmp, new AxleGear(container, axleGearData));
-			tmp = Port.AddComponent(tmp, new DummyRetarder(container));
-			tmp = Port.AddComponent(tmp,
-				new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)));
-			tmp = Port.AddComponent(tmp, clutch);
+
+			cycle.AddComponent(new Driver(container, driverData, new DefaultDriverStrategy()))
+				.AddComponent(new Vehicle(container, vehicleData))
+				.AddComponent(new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia))
+				.AddComponent(new Brakes(container))
+				.AddComponent(new AxleGear(container, axleGearData))
+				.AddComponent(new DummyRetarder(container))
+				.AddComponent(new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)))
+				.AddComponent(new Clutch(container, engineData))
+				.AddComponent(engine);
 
 			var aux = new BusAuxiliariesAdapter(container, AdvancedAuxFile, "Coach",
 				vehicleData.TotalVehicleWeight(), engineData.ConsumptionMap, engineData.IdleSpeed);
 
 			engine.Connect(aux.Port());
 
-			Port.AddComponent(tmp, engine);
-
-			engine.IdleController.RequestPort = clutch.IdleControlPort;
-
 			return container;
 		}
 
diff --git a/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs b/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs
index 5a1f392feb..b832d2801c 100644
--- a/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs
+++ b/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs
@@ -45,6 +45,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Impl;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Utils;
+using TUGraz.VectoCore.Utils;
 using Wheels = TUGraz.VectoCore.Models.SimulationComponent.Impl.Wheels;
 
 namespace TUGraz.VectoCore.Tests.Integration
@@ -87,27 +88,23 @@ namespace TUGraz.VectoCore.Tests.Integration
 
 			var cycle = new DistanceBasedDrivingCycle(container, cycleData);
 			var engine = new CombustionEngine(container, engineData);
-			var clutch = new Clutch(container, engineData, engine.IdleController);
-
-			dynamic tmp = Port.AddComponent(cycle, new Driver(container, driverData, new DefaultDriverStrategy()));
-			tmp = Port.AddComponent(tmp, new Vehicle(container, vehicleData));
-			tmp = Port.AddComponent(tmp, new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia));
-			tmp = Port.AddComponent(tmp, new Brakes(container));
-			tmp = Port.AddComponent(tmp, new AxleGear(container, axleGearData));
-			tmp = Port.AddComponent(tmp, new DummyRetarder(container));
-			tmp = Port.AddComponent(tmp,
-				new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)));
-			tmp = Port.AddComponent(tmp, clutch);
+			var clutch = new Clutch(container, engineData);
+
+			var tmp = cycle.AddComponent(new Driver(container, driverData, new DefaultDriverStrategy()))
+				.AddComponent(new Vehicle(container, vehicleData))
+				.AddComponent(new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia))
+				.AddComponent(new Brakes(container))
+				.AddComponent(new AxleGear(container, axleGearData))
+				.AddComponent(new DummyRetarder(container))
+				.AddComponent(new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)))
+				.AddComponent(clutch)
+				.AddComponent(engine);
 
 			var aux = new EngineAuxiliary(container);
 			aux.AddConstant("", 0.SI<Watt>());
 
 			engine.Connect(aux.Port());
 
-			Port.AddComponent(tmp, engine);
-
-			engine.IdleController.RequestPort = clutch.IdleControlPort;
-
 			return container;
 		}
 
diff --git a/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs b/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
index 4a1f4743e7..3baaded391 100644
--- a/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
+++ b/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
@@ -82,18 +82,16 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 
 			var cycle = new DistanceBasedDrivingCycle(container, cycleData);
 			var cyclePort = cycle.OutPort();
-			dynamic tmp = Port.AddComponent(cycle, new Driver(container, driverData, new DefaultDriverStrategy()));
-			tmp = Port.AddComponent(tmp, new Vehicle(container, vehicleData));
-			tmp = Port.AddComponent(tmp, new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia));
-			tmp = Port.AddComponent(tmp, new Brakes(container));
-			tmp = Port.AddComponent(tmp, new AxleGear(container, axleGearData));
-			var gbx = new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container));
-			tmp = Port.AddComponent(tmp, gbx);
-			var engine = new CombustionEngine(container, engineData);
-			var clutch = new Clutch(container, engineData, engine.IdleController);
-			tmp = Port.AddComponent(tmp, clutch);
-			Port.AddComponent(tmp, engine);
-			engine.IdleController.RequestPort = clutch.IdleControlPort;
+
+			cycle.AddComponent(new Driver(container, driverData, new DefaultDriverStrategy()))
+				.AddComponent(new Vehicle(container, vehicleData))
+				.AddComponent(new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia))
+				.AddComponent(new Brakes(container))
+				.AddComponent(new AxleGear(container, axleGearData))
+				.AddComponent(new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)))
+				.AddComponent(new Clutch(container, engineData))
+				.AddComponent(new CombustionEngine(container, engineData));
+
 
 			cyclePort.Initialize();
 
@@ -140,19 +138,16 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 			var driverData = CreateDriverData(AccelerationFile);
 
 			var cycle = new DistanceBasedDrivingCycle(container, cycleData);
+
 			var cyclePort = cycle.OutPort();
-			dynamic tmp = Port.AddComponent(cycle, new Driver(container, driverData, new DefaultDriverStrategy()));
-			tmp = Port.AddComponent(tmp, new Vehicle(container, vehicleData));
-			tmp = Port.AddComponent(tmp, new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia));
-			tmp = Port.AddComponent(tmp, new Brakes(container));
-			tmp = Port.AddComponent(tmp, new AxleGear(container, axleGearData));
-			var gbx = new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container));
-			tmp = Port.AddComponent(tmp, gbx);
-			var engine = new CombustionEngine(container, engineData);
-			var clutch = new Clutch(container, engineData, engine.IdleController);
-			tmp = Port.AddComponent(tmp, clutch);
-			Port.AddComponent(tmp, engine);
-			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			cycle.AddComponent(new Driver(container, driverData, new DefaultDriverStrategy()))
+				.AddComponent(new Vehicle(container, vehicleData))
+				.AddComponent(new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia))
+				.AddComponent(new Brakes(container))
+				.AddComponent(new AxleGear(container, axleGearData))
+				.AddComponent(new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)))
+				.AddComponent(new Clutch(container, engineData))
+				.AddComponent(new CombustionEngine(container, engineData));
 
 			cyclePort.Initialize();
 
@@ -215,18 +210,14 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 
 			var cycle = new DistanceBasedDrivingCycle(container, cycleData);
 			var cyclePort = cycle.OutPort();
-			dynamic tmp = Port.AddComponent(cycle, new Driver(container, driverData, new DefaultDriverStrategy()));
-			tmp = Port.AddComponent(tmp, new Vehicle(container, vehicleData));
-			tmp = Port.AddComponent(tmp, new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia));
-			tmp = Port.AddComponent(tmp, new Brakes(container));
-			tmp = Port.AddComponent(tmp, new AxleGear(container, axleGearData));
-			tmp = Port.AddComponent(tmp,
-				new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)));
-			var engine = new CombustionEngine(container, engineData);
-			var clutch = new Clutch(container, engineData, engine.IdleController);
-			tmp = Port.AddComponent(tmp, clutch);
-			Port.AddComponent(tmp, engine);
-			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			cycle.AddComponent(new Driver(container, driverData, new DefaultDriverStrategy()))
+				.AddComponent(new Vehicle(container, vehicleData))
+				.AddComponent(new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia))
+				.AddComponent(new Brakes(container))
+				.AddComponent(new AxleGear(container, axleGearData))
+				.AddComponent(new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)))
+				.AddComponent(new Clutch(container, engineData))
+				.AddComponent(new CombustionEngine(container, engineData));
 
 			cyclePort.Initialize();
 
diff --git a/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs b/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs
index a24ab0bced..2eff2b8a78 100644
--- a/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs
+++ b/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs
@@ -78,15 +78,12 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 			var vehicleContainer = new VehicleContainer(ExecutionMode.Engineering, modData);
 
 			var driver = new Driver(vehicleContainer, driverData, new DefaultDriverStrategy());
-			dynamic tmp = Port.AddComponent(driver, new Vehicle(vehicleContainer, vehicleData));
-			tmp = Port.AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia));
-			tmp = Port.AddComponent(tmp, new AxleGear(vehicleContainer, axleGearData));
-
 			var engine = new CombustionEngine(vehicleContainer, engineData);
-			var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController);
-			tmp = Port.AddComponent(tmp, clutch);
-			Port.AddComponent(tmp, engine);
-			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			driver.AddComponent(new Vehicle(vehicleContainer, vehicleData))
+				.AddComponent(new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia))
+				.AddComponent(new AxleGear(vehicleContainer, axleGearData))
+				.AddComponent(new Clutch(vehicleContainer, engineData))
+				.AddComponent(engine);
 
 			var gbx = new MockGearbox(vehicleContainer);
 
@@ -128,16 +125,14 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 
 			var cycle = new DistanceBasedDrivingCycle(vehicleContainer, cycleData);
 
-			dynamic tmp = Port.AddComponent(cycle, new Driver(vehicleContainer, driverData, new DefaultDriverStrategy()));
-			tmp = Port.AddComponent(tmp, new Vehicle(vehicleContainer, vehicleData));
-			tmp = Port.AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia));
-			tmp = Port.AddComponent(tmp, new Brakes(vehicleContainer));
-			tmp = Port.AddComponent(tmp, new AxleGear(vehicleContainer, axleGearData));
-			var engine = new CombustionEngine(vehicleContainer, engineData);
-			var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController);
-			tmp = Port.AddComponent(tmp, clutch);
-			Port.AddComponent(tmp, engine);
-			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			cycle.AddComponent(new Driver(vehicleContainer, driverData, new DefaultDriverStrategy()))
+				.AddComponent(new Vehicle(vehicleContainer, vehicleData))
+				.AddComponent(new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia))
+				.AddComponent(new Brakes(vehicleContainer))
+				.AddComponent(new AxleGear(vehicleContainer, axleGearData))
+				.AddComponent(new Clutch(vehicleContainer, engineData))
+				.AddComponent(new CombustionEngine(vehicleContainer, engineData));
+			//engine.IdleController.RequestPort = clutch.IdleControlPort;
 
 			var gbx = new MockGearbox(vehicleContainer);
 
@@ -201,17 +196,14 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 			var vehicleContainer = new VehicleContainer(ExecutionMode.Engineering, modData);
 
 			var cycle = new DistanceBasedDrivingCycle(vehicleContainer, cycleData);
-
-			dynamic tmp = Port.AddComponent(cycle, new Driver(vehicleContainer, driverData, new DefaultDriverStrategy()));
-			tmp = Port.AddComponent(tmp, new Vehicle(vehicleContainer, vehicleData));
-			tmp = Port.AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia));
-			tmp = Port.AddComponent(tmp, new Brakes(vehicleContainer));
-			tmp = Port.AddComponent(tmp, new AxleGear(vehicleContainer, axleGearData));
-			var engine = new CombustionEngine(vehicleContainer, engineData);
-			var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController);
-			tmp = Port.AddComponent(tmp, clutch);
-			Port.AddComponent(tmp, engine);
-			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			cycle.AddComponent(new Driver(vehicleContainer, driverData, new DefaultDriverStrategy()))
+				.AddComponent(new Vehicle(vehicleContainer, vehicleData))
+				.AddComponent(new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia))
+				.AddComponent(new Brakes(vehicleContainer))
+				.AddComponent(new AxleGear(vehicleContainer, axleGearData))
+				.AddComponent(new Clutch(vehicleContainer, engineData))
+				.AddComponent(new CombustionEngine(vehicleContainer, engineData));
+			//engine.IdleController.RequestPort = clutch.IdleControlPort;
 
 			var gbx = new MockGearbox(vehicleContainer);
 
diff --git a/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs b/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs
index 66cde48821..c826fdb385 100644
--- a/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs
+++ b/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs
@@ -47,6 +47,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Impl;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.FileIO;
 using TUGraz.VectoCore.Tests.Utils;
+using TUGraz.VectoCore.Utils;
 using Wheels = TUGraz.VectoCore.Models.SimulationComponent.Impl.Wheels;
 
 namespace TUGraz.VectoCore.Tests.Integration
@@ -97,7 +98,7 @@ namespace TUGraz.VectoCore.Tests.Integration
 
 			var cycle = new DistanceBasedDrivingCycle(container, cycleData);
 			var engine = new CombustionEngine(container, engineData);
-			var clutch = new Clutch(container, engineData, engine.IdleController);
+			var clutch = new Clutch(container, engineData);
 
 			IShiftStrategy gbxStrategy;
 			switch (gbxType) {
@@ -111,22 +112,20 @@ namespace TUGraz.VectoCore.Tests.Integration
 					throw new ArgumentOutOfRangeException("gbxType", gbxType, null);
 			}
 
-			dynamic tmp = Port.AddComponent(cycle, new Driver(container, driverData, new DefaultDriverStrategy()));
-			tmp = Port.AddComponent(tmp, new Vehicle(container, vehicleData));
-			tmp = Port.AddComponent(tmp, new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia));
-			tmp = Port.AddComponent(tmp, new Brakes(container));
-			tmp = Port.AddComponent(tmp, new AxleGear(container, axleGearData));
-			tmp = Port.AddComponent(tmp, new DummyRetarder(container));
-			tmp = Port.AddComponent(tmp, new Gearbox(container, gearboxData, gbxStrategy));
-			tmp = Port.AddComponent(tmp, clutch);
+			dynamic tmp = cycle.AddComponent(new Driver(container, driverData, new DefaultDriverStrategy()))
+				.AddComponent(new Vehicle(container, vehicleData))
+				.AddComponent(new Wheels(container, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia))
+				.AddComponent(new Brakes(container))
+				.AddComponent(new AxleGear(container, axleGearData))
+				.AddComponent(new DummyRetarder(container))
+				.AddComponent(new Gearbox(container, gearboxData, gbxStrategy))
+				.AddComponent(clutch)
+				.AddComponent(engine);
 
 			var aux = new EngineAuxiliary(container);
 			aux.AddConstant("", 0.SI<Watt>());
 			engine.Connect(aux.Port());
 
-			Port.AddComponent(tmp, engine);
-			engine.IdleController.RequestPort = clutch.IdleControlPort;
-
 			return container;
 		}
 
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/ClutchTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/ClutchTest.cs
index 9657f29c1c..2d2d792763 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponent/ClutchTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/ClutchTest.cs
@@ -69,8 +69,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var container = new VehicleContainer(ExecutionMode.Engineering);
 			var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(CoachEngine);
 			var gearbox = new MockGearbox(container);
-			var idleController = new MockIdleController();
-			var clutch = new Clutch(container, engineData, idleController);
+			var clutch = new Clutch(container, engineData) { IdleController = new MockIdleController() };
 
 			var inPort = clutch.InPort();
 			var outPort = new MockTnOutPort();
@@ -96,8 +95,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(CoachEngine);
 			var gearbox = new MockGearbox(container);
 			var engine = new MockEngine(container);
-			var idleController = new MockIdleController();
-			var clutch = new Clutch(container, engineData, idleController);
+			var clutch = new Clutch(container, engineData) { IdleController = new MockIdleController() };
 
 			var inPort = clutch.InPort();
 			var outPort = new MockTnOutPort();
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs
index eaf3bf38d3..28ea6c3644 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs
@@ -269,7 +269,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(CoachEngine);
 
 			var engine = new CombustionEngine(container, engineData);
-			var clutch = new Clutch(container, engineData, engine.IdleController);
+			var clutch = new Clutch(container, engineData);
 
 			var d = new MockDriver(container);
 
@@ -282,7 +282,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			gearbox.InPort().Connect(clutch.OutPort());
 			clutch.InPort().Connect(engine.OutPort());
 			engine.Connect(aux.Port());
-			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			clutch.IdleController = engine.IdleController;
 
 			//			var expectedResults = VectoCSVFile.Read(TestContext.DataRow["ResultFile"].ToString());
 
@@ -528,7 +528,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var engineData = MockSimulationDataFactory.CreateEngineDataFromFile(engineFile);
 
 			engine = new CombustionEngine(container, engineData);
-			var clutch = new Clutch(container, engineData, engine.IdleController);
+			var clutch = new Clutch(container, engineData);
 
 			var d = new MockDriver(container);
 
@@ -543,7 +543,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			engine.Connect(aux.Port());
 
 			// has to be done after connecting components!
-			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			clutch.IdleController = engine.IdleController;
 
 			requestPort = gearbox.OutPort();
 
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs
index 06ba84cd14..11b4389ef1 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs
@@ -75,12 +75,12 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 
 			var driver = new Driver(vehicleContainer, driverData, new DefaultDriverStrategy());
 			var engine = new CombustionEngine(vehicleContainer, engineData);
-			var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController);
+			var clutch = new Clutch(vehicleContainer, engineData);
 			dynamic tmp = AddComponent(driver, new Vehicle(vehicleContainer, vehicleData));
 			tmp = AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia));
 			tmp = AddComponent(tmp, clutch);
 			AddComponent(tmp, engine);
-			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			clutch.IdleController = engine.IdleController;
 
 			var gbx = new MockGearbox(vehicleContainer) { Gear = 1 };
 
@@ -131,13 +131,13 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 
 			var driver = new Driver(vehicleContainer, driverData, new DefaultDriverStrategy());
 			var engine = new CombustionEngine(vehicleContainer, engineData);
-			var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController);
+			var clutch = new Clutch(vehicleContainer, engineData);
 
 			dynamic tmp = AddComponent(driver, new Vehicle(vehicleContainer, vehicleData));
 			tmp = AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia));
 			tmp = AddComponent(tmp, clutch);
 			AddComponent(tmp, engine);
-			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			clutch.IdleController = engine.IdleController;
 
 			var gbx = new MockGearbox(vehicleContainer);
 			gbx.Gear = 1;
@@ -194,8 +194,8 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			dynamic tmp = AddComponent(driver, new Vehicle(vehicleContainer, vehicleData));
 			tmp = AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius, vehicleData.WheelsInertia));
 			var engine = new CombustionEngine(vehicleContainer, engineData);
-			var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController);
-			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			var clutch = new Clutch(vehicleContainer, engineData);
+			clutch.IdleController = engine.IdleController;
 			tmp = AddComponent(tmp, clutch);
 			AddComponent(tmp, engine);
 
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponentData/TorqueConverterDataTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponentData/TorqueConverterDataTest.cs
index 2547abd7e7..87b0199039 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponentData/TorqueConverterDataTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponentData/TorqueConverterDataTest.cs
@@ -1,5 +1,9 @@
-using NUnit.Framework;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using NUnit.Framework;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData.Reader.ComponentData;
 using TUGraz.VectoCore.Tests.Utils;
 
@@ -21,37 +25,177 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 		TestCase(170, 50, 1308.974, 900.0845),
 		TestCase(190, 30, 1029.455, 539.6072),
 		TestCase(190, 50, 1269.513, 837.2174),
-		TestCase(190, 70, 1465.33, 1128.088),]
+		TestCase(190, 70, 1465.33, 1128.088),
+		TestCase(530.517, 1.930, 100, 100),
+		]
 		public void TestTorqueConverterOperatingPoint(double nOut, double Pout, double nInExpected, double tqInExpected)
 		{
 			var tqLimit = 1600;
 			Assert.IsTrue(nInExpected < tqLimit);
 			var tqInput = new[] {
-				"0,3.935741,563.6598  ",
-				"0.1,3.296827,534.1364",
-				"0.2,2.701476,504.6129",
-				"0.3,2.265852,472.1372",
-				"0.4,1.931875,421.9474",
-				"0.5,1.554335,354.0435",
-				"0.6,1.249399,268.4255",
-				"0.7,1.075149,114.9037",
+				"0.0,1.80,377.80",
+				"0.1,1.71,365.21",
+				"0.2,1.61,352.62",
+				"0.3,1.52,340.02",
+				"0.4,1.42,327.43",
+				"0.5,1.33,314.84",
+				"0.6,1.23,302.24",
+				"0.7,1.14,264.46",
+				"0.8,1.04,226.68",
+				"0.9,0.95,188.90",
+				"1.0,0.95,0.00",
 			};
 
 			var tqData =
 				TorqueConverterDataReader.ReadFromStream(InputDataHelper.InputDataAsStream("Speed Ratio, Torque Ratio,MP1000",
-					tqInput), 1000.RPMtoRad());
-
-			PerSecond inAngularSpeed;
-			NewtonMeter inTorque;
-
+					tqInput), 1000.RPMtoRad(), tqLimit.RPMtoRad());
 
 			var outAngularSpeed = nOut.RPMtoRad();
 			var outTorque = (Pout * 1000).SI<Watt>() / outAngularSpeed;
-			tqData.GetInputTorqueAndAngularSpeed(outTorque, outAngularSpeed, out inTorque, out inAngularSpeed);
+			var result = tqData.FindOperatingPoint(outTorque, outAngularSpeed);
+
+			// TODO!
+			//Assert.IsTrue(inAngularSpeed.Value() < 1600.RPMtoRad().Value());
+			Debug.WriteLine("n_out: {0}, P_out: {1}, n_in: {2}, Tq_in: {3}", nOut, Pout, result.InAngularVelocity,
+				result.InTorque);
+			//Assert.AreEqual(nInExpected.RPMtoRad().Value(), inAngularSpeed.Value(), 5);
+			//Assert.AreEqual(tqInExpected, inTorque.Value(), 10);
+		}
+
+		[Test]
+		public void TestTorqueConverterComparisonV2()
+		{
+			var tqLimit = 1600;
+
+			var tqInput = new[] {
+				"0.0,1.80,377.80",
+				"0.1,1.71,365.21",
+				"0.2,1.61,352.62",
+				"0.3,1.52,340.02",
+				"0.4,1.42,327.43",
+				"0.5,1.33,314.84",
+				"0.6,1.23,302.24",
+				"0.7,1.14,264.46",
+				"0.8,1.04,226.68",
+				"0.9,0.95,188.90",
+				"1.0,0.95,0.00",
+			};
+			var testData = new List<Tuple<double, double>>() {
+				Tuple.Create(139.4087374, 72.74847642),
+				Tuple.Create(2275.286998, 453.9413043),
+				Tuple.Create(1507.256216, 1012.44118),
+				Tuple.Create(26.58522419, 29.25312925),
+				Tuple.Create(1752.83589, 328.6386397),
+			};
+			var tqData =
+				TorqueConverterDataReader.ReadFromStream(InputDataHelper.InputDataAsStream("Speed Ratio, Torque Ratio,MP1000",
+					tqInput), 1000.RPMtoRad(), tqLimit.RPMtoRad());
 
-			Assert.IsTrue(inAngularSpeed.Value() < 1600.RPMtoRad().Value());
-			Assert.AreEqual(nInExpected.RPMtoRad().Value(), inAngularSpeed.Value(), 5);
-			Assert.AreEqual(tqInExpected, inTorque.Value(), 10);
+			foreach (var entry in testData) {
+				var torqueTCOut = entry.Item1.SI<NewtonMeter>();
+				var angularSpeedOut = entry.Item2.RPMtoRad();
+				var result = tqData.FindOperatingPoint(torqueTCOut, angularSpeedOut);
+				Debug.WriteLine("n_out: {0}, tq_out: {1}, n_in: {2}, Tq_in: {3}", angularSpeedOut.Value() / Constants.RPMToRad,
+					torqueTCOut.Value(), result.InAngularVelocity.Value() / Constants.RPMToRad, result.InTorque.Value());
+			}
+		}
+
+		[Test]
+		public void TestTorqueConverterComparisonV2_ZF_EcoLife()
+		{
+			var tqLimit = 1600;
+
+			var tqInput = new[] {
+				"0,2.29,646",
+				"0.1,2.16,663",
+				"0.2,1.99,643",
+				"0.3,1.84,611",
+				"0.4,1.67,586",
+				"0.5,1.51,556",
+				"0.6,1.35,521",
+				"0.7,1.21,465",
+				"0.8,1.07,404",
+				"0.9,0.99,228",
+				"1,0.99,0",
+				"1.1,0.991,-103",
+				"1.2,0.994,-172",
+				"1.3,0.994,-229",
+				"1.4,0.996,-286",
+				"1.5,0.996,-346",
+				"1.6,0.996,-407",
+				"1.7,0.996,-460",
+				"1.8,0.996,-546",
+				"1.9,0.996,-616",
+				"2,0.997,-685",
+			};
+			var testData = new List<Tuple<double, double>>() {
+				Tuple.Create(139.4087374, 72.74847642),
+				Tuple.Create(2275.286998, 453.9413043),
+				Tuple.Create(1507.256216, 1012.44118),
+				Tuple.Create(26.58522419, 29.25312925),
+				Tuple.Create(1752.83589, 328.6386397),
+			};
+			var tqData =
+				TorqueConverterDataReader.ReadFromStream(InputDataHelper.InputDataAsStream("Speed Ratio, Torque Ratio,MP1000",
+					tqInput), 1000.RPMtoRad(), tqLimit.RPMtoRad());
+
+			foreach (var entry in testData) {
+				var torqueTCOut = entry.Item1.SI<NewtonMeter>();
+				var angularSpeedOut = entry.Item2.RPMtoRad();
+				var result = tqData.FindOperatingPoint(torqueTCOut, angularSpeedOut);
+				Debug.WriteLine("n_out: {0}, tq_out: {1}, n_in: {2}, Tq_in: {3}", angularSpeedOut.Value() / Constants.RPMToRad,
+					torqueTCOut.Value(), result.InAngularVelocity.Value() / Constants.RPMToRad, result.InTorque.Value());
+			}
+		}
+
+
+		[Test]
+		public void TestTorqueConverterComparisonV2_ZF_W410_6_TP2_575_mue232()
+		{
+			var tqLimit = 1600;
+
+			var tqInput = new[] {
+				"0.000,2.320,518.3",
+				"0.100,2.180,545.0",
+				"0.200,2.010,575.4",
+				"0.300,1.850,573.1",
+				"0.400,1.690,572.5",
+				"0.500,1.520,553.1",
+				"0.600,1.360,516.6",
+				"0.700,1.220,460.0",
+				"0.800,1.080,397.1",
+				"0.900,1.000,246.8",
+				"0.950,0.990,113.6",
+				"1.000,0.990,0.0",
+				"1.100,0.991,-103.0",
+				"1.200,0.994,-172.0",
+				"1.300,0.994,-229.0",
+				"1.400,0.996,-286.0",
+				"1.500,0.996,-346.0",
+				"1.600,0.996,-407.0",
+				"1.700,0.996,-460.0",
+				"1.800,0.996,-546.0",
+				"1.900,0.996,-616.0",
+				"2.000,0.997,-685.0",
+			};
+			var testData = new List<Tuple<double, double>>() {
+				Tuple.Create(139.4087374, 72.74847642),
+				Tuple.Create(2275.286998, 453.9413043),
+				Tuple.Create(1507.256216, 1012.44118),
+				Tuple.Create(26.58522419, 29.25312925),
+				Tuple.Create(1752.83589, 328.6386397),
+			};
+			var tqData =
+				TorqueConverterDataReader.ReadFromStream(InputDataHelper.InputDataAsStream("Speed Ratio, Torque Ratio,MP1000",
+					tqInput), 1000.RPMtoRad(), tqLimit.RPMtoRad());
+
+			foreach (var entry in testData) {
+				var torqueTCOut = entry.Item1.SI<NewtonMeter>();
+				var angularSpeedOut = entry.Item2.RPMtoRad();
+				var result = tqData.FindOperatingPoint(torqueTCOut, angularSpeedOut);
+				Debug.WriteLine("n_out: {0}, tq_out: {1}, n_in: {2}, Tq_in: {3}", angularSpeedOut.Value() / Constants.RPMToRad,
+					torqueTCOut.Value(), result.InAngularVelocity.Value() / Constants.RPMToRad, result.InTorque.Value());
+			}
 		}
 
 		[Test,
@@ -88,17 +232,13 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 
 			var tqData =
 				TorqueConverterDataReader.ReadFromStream(InputDataHelper.InputDataAsStream("Speed Ratio, Torque Ratio,MP1000",
-					tqInput), 1000.RPMtoRad());
-
-			PerSecond inAngularSpeed;
-			NewtonMeter inTorque;
-
+					tqInput), 1000.RPMtoRad(), tqLimit);
 
 			var outAngularSpeed = nOut.RPMtoRad();
 			var outTorque = (Pout * 1000).SI<Watt>() / outAngularSpeed;
-			tqData.GetInputTorqueAndAngularSpeed(outTorque, outAngularSpeed, out inTorque, out inAngularSpeed);
+			var result = tqData.FindOperatingPoint(outTorque, outAngularSpeed);
 
-			Assert.IsTrue(inAngularSpeed.Value() > tqLimit.Value());
+			Assert.IsTrue(result.InAngularVelocity.Value() > tqLimit.Value());
 		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/Gearbox.vgbx b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/Gearbox.vgbx
index acac788219..840f6b81ca 100644
--- a/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/Gearbox.vgbx
+++ b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/Gearbox.vgbx
@@ -54,7 +54,7 @@
     "GearboxType": "AT",
     "TorqueConverter": {
       "Enabled": true,
-      "File": "TorqueConverter.vtcc",
+      "File": "W410_6_TP2_575_mue232.vtcc",
       "RefRPM": 1000.0,
       "Inertia": 0.5
     }
diff --git a/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/TorqueConverter.vtcc b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/TorqueConverter.vtcc
index 1a329800c2..550030f28f 100644
--- a/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/TorqueConverter.vtcc
+++ b/VectoCore/VectoCoreTest/TestData/Components/AT_GBX/TorqueConverter.vtcc
@@ -1,9 +1,22 @@
 Speed Ratio, Torque Ratio,MP1000
-0,3.935741,563.6598
-0.1,3.296827,534.1364
-0.2,2.701476,504.6129
-0.3,2.265852,472.1372
-0.4,1.931875,421.9474
-0.5,1.554335,354.0435
-0.6,1.249399,268.4255
-0.7,1.075149,114.9037
+0.0,1.80,377.80
+0.1,1.71,365.21
+0.2,1.61,352.62
+0.3,1.52,340.02
+0.4,1.42,327.43
+0.5,1.33,314.84
+0.6,1.23,302.24
+0.7,1.14,264.46
+0.8,1.04,226.68
+0.9,0.95,188.90
+1.0,0.95,0.00
+1.005,1.000,0.00
+1.100,1.000,-40.34
+1.222,1.000,-80.34
+1.375,1.000,-136.11
+1.571,1.000,-216.52
+1.833,1.000,-335.19
+2.200,1.000,-528.77
+2.750,1.000,-883.40
+4.400,1.000,-2462.17
+11.000,1.000,-16540.98
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/Utils/MockGearbox.cs b/VectoCore/VectoCoreTest/Utils/MockGearbox.cs
index 08008d6fcf..41859d3d5a 100644
--- a/VectoCore/VectoCoreTest/Utils/MockGearbox.cs
+++ b/VectoCore/VectoCoreTest/Utils/MockGearbox.cs
@@ -84,21 +84,21 @@ namespace TUGraz.VectoCore.Tests.Utils
 			_outPort = other;
 		}
 
-		public IResponse Request(Second absTime, Second dt, NewtonMeter torque, PerSecond angularVelocity, bool dryRun = false)
+		public IResponse Request(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, bool dryRun = false)
 		{
 			if (_outPort != null) {
 				if (Gear > 0) {
-					return _outPort.Request(absTime, dt, torque, angularVelocity, dryRun);
+					return _outPort.Request(absTime, dt, outTorque, outAngularVelocity, dryRun);
 				}
 				return _outPort.Request(absTime, dt, 0.SI<NewtonMeter>(), null, dryRun);
 			}
 			throw new NotImplementedException();
 		}
 
-		public IResponse Initialize(NewtonMeter torque, PerSecond angularVelocity)
+		public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity)
 		{
 			if (_outPort != null) {
-				return _outPort.Initialize(torque, angularVelocity);
+				return _outPort.Initialize(outTorque, outAngularVelocity);
 			}
 			throw new NotImplementedException();
 		}
diff --git a/VectoCore/VectoCoreTest/Utils/MockIdleController.cs b/VectoCore/VectoCoreTest/Utils/MockIdleController.cs
index 0031353c96..a592aa8d80 100644
--- a/VectoCore/VectoCoreTest/Utils/MockIdleController.cs
+++ b/VectoCore/VectoCoreTest/Utils/MockIdleController.cs
@@ -39,13 +39,13 @@ namespace TUGraz.VectoCore.Tests.Utils
 {
 	public class MockIdleController : ICombustionEngineIdleController
 	{
-		public IResponse Request(Second absTime, Second dt, NewtonMeter torque, PerSecond angularVelocity, bool dryRun = false)
+		public IResponse Request(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, bool dryRun = false)
 		{
 			//throw new System.NotImplementedException();
 			return new ResponseSuccess();
 		}
 
-		public IResponse Initialize(NewtonMeter torque, PerSecond angularVelocity)
+		public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity)
 		{
 			//throw new System.NotImplementedException();
 			return new ResponseSuccess();
diff --git a/VectoCore/VectoCoreTest/Utils/MockPorts.cs b/VectoCore/VectoCoreTest/Utils/MockPorts.cs
index 94c0e79f1f..2ab63efb9c 100644
--- a/VectoCore/VectoCoreTest/Utils/MockPorts.cs
+++ b/VectoCore/VectoCoreTest/Utils/MockPorts.cs
@@ -47,39 +47,42 @@ namespace TUGraz.VectoCore.Tests.Utils
 		public NewtonMeter Torque;
 		public PerSecond AngularVelocity;
 
-		public IResponse Request(Second absTime, Second dt, NewtonMeter torque, PerSecond angularVelocity, bool dryRun = false)
+		public IResponse Request(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity,
+			bool dryRun = false)
 		{
 			AbsTime = absTime;
 			Dt = dt;
-			Torque = torque;
-			AngularVelocity = angularVelocity;
-			Log.Debug("Request: absTime: {0}, dt: {1}, torque: {2}, angularVelocity: {3}", absTime, dt, torque, angularVelocity);
+			Torque = outTorque;
+			AngularVelocity = outAngularVelocity;
+			Log.Debug("Request: absTime: {0}, dt: {1}, torque: {2}, angularVelocity: {3}", absTime, dt, outTorque,
+				outAngularVelocity);
 
 			if (dryRun) {
 				return new ResponseDryRun {
 					Source = this,
-					GearboxPowerRequest = torque * angularVelocity,
-					EnginePowerRequest = torque * angularVelocity,
-					ClutchPowerRequest = torque * angularVelocity,
-					DeltaFullLoad = (torque - 2300.SI<NewtonMeter>()) * angularVelocity,
-					DeltaDragLoad = (torque - -100.SI<NewtonMeter>()) * angularVelocity
+					GearboxPowerRequest = outTorque * outAngularVelocity,
+					EnginePowerRequest = outTorque * outAngularVelocity,
+					ClutchPowerRequest = outTorque * outAngularVelocity,
+					DeltaFullLoad = (outTorque - 2300.SI<NewtonMeter>()) * outAngularVelocity,
+					DeltaDragLoad = (outTorque - -100.SI<NewtonMeter>()) * outAngularVelocity
 				};
 			}
 
 			return new ResponseSuccess {
 				Source = this,
-				GearboxPowerRequest = torque * angularVelocity,
-				EnginePowerRequest = torque * angularVelocity,
-				ClutchPowerRequest = torque * angularVelocity,
+				GearboxPowerRequest = outTorque * outAngularVelocity,
+				EnginePowerRequest = outTorque * outAngularVelocity,
+				ClutchPowerRequest = outTorque * outAngularVelocity,
 			};
 		}
 
-		public IResponse Initialize(NewtonMeter torque, PerSecond angularVelocity)
+		public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity)
 		{
 			return new ResponseSuccess {
 				Source = this,
-				EnginePowerRequest = torque * angularVelocity,
-				ClutchPowerRequest = torque * angularVelocity,
+				EnginePowerRequest = outTorque * (outAngularVelocity ?? 0.SI<PerSecond>()),
+				ClutchPowerRequest = outTorque * (outAngularVelocity ?? 0.SI<PerSecond>()),
+				EngineSpeed = outAngularVelocity,
 			};
 		}
 
-- 
GitLab