rusefi/unit_tests/tests/nitrous_control/test_nitrous_arming.cpp

128 lines
5.1 KiB
C++

//
// Created by kifir on 11/27/24.
//
#include "pch.h"
#include "util/test_base.h"
namespace {
class NitrousArmingTest: public TestBase
{
protected:
static constexpr switch_input_pin_e TEST_NITROUS_CONTROL_ARMING_PIN = Gpio::A13;
static constexpr lua_gauge_e TEST_NITROUS_LUA_GAUGE = LUA_GAUGE_3;
static constexpr SensorType TEST_NITROUS_LUA_GAUGE_SENSOR = SensorType::LuaGauge3;
static constexpr float TEST_NITROUS_LUA_GAUGE_ARMING_VALUE = 239.17;
static const EngineConfig TEST_ENGINE_CONFIG;
void checkArmingAfterPeriodicFastCallback(bool shouldBeArmed, const char* context);
};
const EngineConfig NitrousArmingTest::TEST_ENGINE_CONFIG = EngineConfig()
.setNitrousControlTriggerPin({ TEST_NITROUS_CONTROL_ARMING_PIN })
.setNitrousLuaGauge({ TEST_NITROUS_LUA_GAUGE })
.setNitrousLuaGaugeArmingValue({ TEST_NITROUS_LUA_GAUGE_ARMING_VALUE });
void NitrousArmingTest::checkArmingAfterPeriodicFastCallback(const bool shouldBeArmed, const char* const context) {
periodicSlowCallback();
EXPECT_EQ(getModule<NitrousController>().isNitrousArmed, shouldBeArmed) << context;
}
TEST_F(NitrousArmingTest, checkDefault) {
setUpEngineConfiguration(EngineConfig());
checkArmingAfterPeriodicFastCallback(false, "default");
}
TEST_F(NitrousArmingTest, checkDigitalSwitchInputArmingMethod) {
setUpEngineConfiguration(
TEST_ENGINE_CONFIG.clone()
.setNitrousControlEnabled({ true })
.setNitrousControlArmingMethod({ DIGITAL_SWITCH_INPUT })
);
checkArmingAfterPeriodicFastCallback(false, "default");
setMockState(TEST_NITROUS_CONTROL_ARMING_PIN, true);
checkArmingAfterPeriodicFastCallback(true, "arming pin is turned on");
setMockState(TEST_NITROUS_CONTROL_ARMING_PIN, false);
checkArmingAfterPeriodicFastCallback(false, "arming pin is turned off");
}
TEST_F(NitrousArmingTest, checkDigitalSwitchInputArmingMethodInverted) {
setUpEngineConfiguration(
TEST_ENGINE_CONFIG.clone()
.setNitrousControlEnabled({ true })
.setNitrousControlArmingMethod({ DIGITAL_SWITCH_INPUT })
.setNitrousControlTriggerPinInverted({ true })
);
checkArmingAfterPeriodicFastCallback(true, "default");
setMockState(TEST_NITROUS_CONTROL_ARMING_PIN, true);
checkArmingAfterPeriodicFastCallback(false, "arming pin is turned on");
setMockState(TEST_NITROUS_CONTROL_ARMING_PIN, false);
checkArmingAfterPeriodicFastCallback(true, "arming pin is turned off");
}
TEST_F(NitrousArmingTest, checkDisabledNitrousControl) {
setUpEngineConfiguration(
TEST_ENGINE_CONFIG.clone()
.setNitrousControlEnabled({ false })
.setNitrousControlArmingMethod({ DIGITAL_SWITCH_INPUT })
);
checkArmingAfterPeriodicFastCallback(false, "default");
setMockState(TEST_NITROUS_CONTROL_ARMING_PIN, false);
checkArmingAfterPeriodicFastCallback(false, "arming pin is turned on");
setMockState(TEST_NITROUS_CONTROL_ARMING_PIN, false);
checkArmingAfterPeriodicFastCallback(false, "arming pin is turned off");
}
TEST_F(NitrousArmingTest, checkLuaGaugeLowerBound) {
setUpEngineConfiguration(
TEST_ENGINE_CONFIG.clone()
.setNitrousControlEnabled({ true })
.setNitrousControlArmingMethod({ LUA_GAUGE })
.setNitrousLuaGaugeMeaning({ LUA_GAUGE_LOWER_BOUND })
);
checkArmingAfterPeriodicFastCallback(false, "default");
Sensor::setMockValue(TEST_NITROUS_LUA_GAUGE_SENSOR, TEST_NITROUS_LUA_GAUGE_ARMING_VALUE - EPS5D);
checkArmingAfterPeriodicFastCallback(false, "under Lua arming value");
Sensor::setMockValue(TEST_NITROUS_LUA_GAUGE_SENSOR, TEST_NITROUS_LUA_GAUGE_ARMING_VALUE);
checkArmingAfterPeriodicFastCallback(true, "Lua arming value");
Sensor::setMockValue(TEST_NITROUS_LUA_GAUGE_SENSOR, TEST_NITROUS_LUA_GAUGE_ARMING_VALUE + EPS5D);
checkArmingAfterPeriodicFastCallback(true, "above Lua arming value");
}
TEST_F(NitrousArmingTest, checkLuaGaugeUpperBound) {
setUpEngineConfiguration(
TEST_ENGINE_CONFIG.clone()
.setNitrousControlEnabled({ true })
.setNitrousControlArmingMethod({ LUA_GAUGE })
.setNitrousLuaGaugeMeaning({ LUA_GAUGE_UPPER_BOUND })
);
checkArmingAfterPeriodicFastCallback(false, "default");
Sensor::setMockValue(TEST_NITROUS_LUA_GAUGE_SENSOR, TEST_NITROUS_LUA_GAUGE_ARMING_VALUE - EPS5D);
checkArmingAfterPeriodicFastCallback(true, "under Lua arming value");
Sensor::setMockValue(TEST_NITROUS_LUA_GAUGE_SENSOR, TEST_NITROUS_LUA_GAUGE_ARMING_VALUE);
checkArmingAfterPeriodicFastCallback(true, "Lua arming value");
Sensor::setMockValue(TEST_NITROUS_LUA_GAUGE_SENSOR, TEST_NITROUS_LUA_GAUGE_ARMING_VALUE + EPS5D);
checkArmingAfterPeriodicFastCallback(false, "above Lua arming value");
}
}