rusefi/unit_tests/tests/actuators/test_alternator.cpp

61 lines
1.6 KiB
C++

#include "pch.h"
#include "alternator_controller.h"
using ::testing::StrictMock;
using ::testing::Return;
TEST(Alternator, TestSetPoint) {
EngineTestHelper eth(engine_type_e::TEST_ENGINE);
engineConfiguration->targetVBatt = 14.2f;
engineConfiguration->cranking.rpm = 500;
engineConfiguration->isAlternatorControlEnabled = true;
AlternatorController dut;
Sensor::setMockValue(SensorType::Rpm, 500);
// disabled if rpm <= cranking.rpm
EXPECT_EQ(-1, dut.getSetpoint().value_or(-1));
Sensor::setMockValue(SensorType::Rpm, 501);
// enabled!
EXPECT_EQ(engineConfiguration->targetVBatt, dut.getSetpoint().value_or(-1));
engineConfiguration->isAlternatorControlEnabled = false;
// disabled manually
EXPECT_EQ(-1, dut.getSetpoint().value_or(-1));
}
TEST(Alternator, observePlant) {
EngineTestHelper eth(engine_type_e::TEST_ENGINE);
AlternatorController dut;
Sensor::setMockValue(SensorType::BatteryVoltage, 13);
EXPECT_EQ(13, dut.observePlant().value_or(0));
}
TEST(Alternator, openLoop) {
AlternatorController dut;
// No open loop for now
EXPECT_EQ(dut.getOpenLoop(10), 0);
}
TEST(Alternator, ClosedLoop) {
EngineTestHelper eth(engine_type_e::TEST_ENGINE);
AlternatorController dut;
engineConfiguration->alternatorControl.pFactor = 1.5f;
engineConfiguration->alternatorControl.iFactor = 0;
engineConfiguration->alternatorControl.dFactor = 0;
engineConfiguration->alternatorControl.offset = 0;
// apply PID settings
dut.pidReset();
// Target of 30 with position 20 should yield positive duty, P=1.5 means 15% duty for 10% error
EXPECT_EQ(dut.getClosedLoop(30, 20).value_or(0), 15);
}