483 lines
18 KiB
C++
483 lines
18 KiB
C++
//
|
|
// Created by kifir on 11/4/24.
|
|
//
|
|
|
|
#include "pch.h"
|
|
|
|
#include "test_engine_configuration.h"
|
|
|
|
#include "engine_configuration_defaults.h"
|
|
|
|
TestEngineConfiguration& TestEngineConfiguration::getInstance() {
|
|
return instance;
|
|
}
|
|
|
|
void TestEngineConfiguration::configureLaunchControlEnabled(const std::optional<bool> launchControlEnabled) {
|
|
if (launchControlEnabled.has_value()) {
|
|
engineConfiguration->launchControlEnabled = launchControlEnabled.value();
|
|
} else {
|
|
ASSERT_FALSE(engineConfiguration->launchControlEnabled); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureLaunchActivationMode(
|
|
const std::optional<launchActivationMode_e> launchActivationMode
|
|
) {
|
|
if (launchActivationMode.has_value()) {
|
|
engineConfiguration->launchActivationMode = launchActivationMode.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->launchActivationMode,
|
|
engine_configuration_defaults::LAUNCH_ACTIVATION_MODE
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureLaunchSpeedThreshold(const std::optional<int> launchSpeedThreshold) {
|
|
if (launchSpeedThreshold.has_value()) {
|
|
engineConfiguration->launchSpeedThreshold = launchSpeedThreshold.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->launchSpeedThreshold,
|
|
engine_configuration_defaults::LAUNCH_SPEED_THRESHOLD
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureLaunchRpm(const std::optional<int> launchRpm) {
|
|
if (launchRpm.has_value()) {
|
|
engineConfiguration->launchRpm = launchRpm.value();
|
|
} else {
|
|
ASSERT_EQ(engineConfiguration->launchRpm, 3000); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureLaunchRpmWindow(const std::optional<int> launchRpmWindow) {
|
|
if (launchRpmWindow.has_value()) {
|
|
engineConfiguration->launchRpmWindow = launchRpmWindow.value();
|
|
} else {
|
|
ASSERT_EQ(engineConfiguration->launchRpmWindow, 500); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureLaunchCorrectionsEndRpm(const std::optional<int> launchCorrectionsEndRpm) {
|
|
if (launchCorrectionsEndRpm.has_value()) {
|
|
engineConfiguration->launchCorrectionsEndRpm = launchCorrectionsEndRpm.value();
|
|
} else {
|
|
ASSERT_EQ(engineConfiguration->launchCorrectionsEndRpm, 0); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureIgnitionRetardEnable(std::optional<bool> ignitionRetardEnable) {
|
|
if (ignitionRetardEnable.has_value()) {
|
|
engineConfiguration->enableLaunchRetard = ignitionRetardEnable.value();
|
|
} else {
|
|
ASSERT_FALSE(engineConfiguration->enableLaunchRetard); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureIgnitionRetard(std::optional<float> ignitionRetard) {
|
|
if (ignitionRetard.has_value()) {
|
|
engineConfiguration->launchTimingRetard = ignitionRetard.value();
|
|
} else {
|
|
ASSERT_EQ(engineConfiguration->launchTimingRetard, 0); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureSmoothRetardMode(std::optional<bool> smoothRetardMode) {
|
|
if (smoothRetardMode.has_value()) {
|
|
engineConfiguration->launchSmoothRetard = smoothRetardMode.value();
|
|
} else {
|
|
ASSERT_FALSE(engineConfiguration->launchSmoothRetard); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureEnableIgnitionCut(const std::optional<bool> enableIgnitionCut) {
|
|
if (enableIgnitionCut.has_value()) {
|
|
engineConfiguration->launchSparkCutEnable = enableIgnitionCut.value();
|
|
} else {
|
|
ASSERT_FALSE(engineConfiguration->launchSparkCutEnable); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureInitialIgnitionCutPercent(const std::optional<int> initialIgnitionCutPercent) {
|
|
if (initialIgnitionCutPercent.has_value()) {
|
|
engineConfiguration->initialIgnitionCutPercent = initialIgnitionCutPercent.value();
|
|
} else {
|
|
ASSERT_EQ(engineConfiguration->initialIgnitionCutPercent, 0); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureFinalIgnitionCutPercentBeforeLaunch(
|
|
const std::optional<int> finalIgnitionCutPercentBeforeLaunch
|
|
) {
|
|
if (finalIgnitionCutPercentBeforeLaunch.has_value()) {
|
|
engineConfiguration->finalIgnitionCutPercentBeforeLaunch = finalIgnitionCutPercentBeforeLaunch.value();
|
|
} else {
|
|
ASSERT_EQ(engineConfiguration->finalIgnitionCutPercentBeforeLaunch, 0); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureTorqueReductionEnabled(const std::optional<bool> torqueReductionEnabled) {
|
|
if (torqueReductionEnabled.has_value()) {
|
|
engineConfiguration->torqueReductionEnabled = torqueReductionEnabled.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->torqueReductionEnabled,
|
|
engine_configuration_defaults::ENABLE_SHIFT_TORQUE_REDUCTION
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureTorqueReductionActivationMode(
|
|
const std::optional<torqueReductionActivationMode_e> activationMode
|
|
) {
|
|
if (activationMode.has_value()) {
|
|
engineConfiguration->torqueReductionActivationMode = activationMode.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->torqueReductionActivationMode,
|
|
engine_configuration_defaults::TORQUE_REDUCTION_ACTIVATION_MODE
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureTorqueReductionTriggerPin(const std::optional<switch_input_pin_e> pin) {
|
|
if (pin.has_value()) {
|
|
engineConfiguration->torqueReductionTriggerPin = pin.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->torqueReductionTriggerPin,
|
|
engine_configuration_defaults::TORQUE_REDUCTION_TRIGGER_PIN
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureTorqueReductionButtonInverted(const std::optional<bool> pinInverted) {
|
|
if (pinInverted.has_value()) {
|
|
engineConfiguration->torqueReductionTriggerPinInverted = pinInverted.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->torqueReductionTriggerPinInverted,
|
|
engine_configuration_defaults::TORQUE_REDUCTION_TRIGGER_PIN_INVERTED
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureLaunchActivatePin(const std::optional<switch_input_pin_e> pin) {
|
|
if (pin.has_value()) {
|
|
engineConfiguration->launchActivatePin = pin.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->launchActivatePin,
|
|
engine_configuration_defaults::LAUNCH_ACTIVATE_PIN
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureLaunchActivateInverted(const std::optional<bool> pinInverted) {
|
|
if (pinInverted.has_value()) {
|
|
engineConfiguration->launchActivateInverted = pinInverted.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->launchActivateInverted,
|
|
engine_configuration_defaults::LAUNCH_ACTIVATE_PIN_INVERTED
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureLimitTorqueReductionTime(std::optional<bool> limitTorqueReductionTime) {
|
|
if (limitTorqueReductionTime.has_value()) {
|
|
engineConfiguration->limitTorqueReductionTime = limitTorqueReductionTime.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->limitTorqueReductionTime,
|
|
engine_configuration_defaults::LIMIT_TORQUE_REDUCTION_TIME
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureTorqueReductionTime(std::optional<float> timeout) {
|
|
if (timeout.has_value()) {
|
|
engineConfiguration->torqueReductionTime = timeout.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->torqueReductionTime,
|
|
engine_configuration_defaults::TORQUE_REDUCTION_TIME
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureTorqueReductionArmingRpm(const std::optional<float> armingRpm) {
|
|
if (armingRpm.has_value()) {
|
|
engineConfiguration->torqueReductionArmingRpm = armingRpm.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->torqueReductionArmingRpm,
|
|
engine_configuration_defaults::TORQUE_REDUCTION_ARMING_RPM
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureTorqueReductionArmingApp(const std::optional<float> armingApp) {
|
|
if (armingApp.has_value()) {
|
|
engineConfiguration->torqueReductionArmingApp = armingApp.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->torqueReductionArmingApp,
|
|
engine_configuration_defaults::TORQUE_REDUCTION_ARMING_APP
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureTorqueReductionIgnitionCut(const std::optional<int8_t> ignitionCut) {
|
|
if (ignitionCut.has_value()) {
|
|
engineConfiguration->torqueReductionIgnitionCut = ignitionCut.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->torqueReductionIgnitionCut,
|
|
engine_configuration_defaults::TORQUE_REDUCTION_IGNITION_CUT
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureTorqueReductionIgnitionRetard(const std::optional<int8_t> ignitionRetard) {
|
|
if (ignitionRetard.has_value()) {
|
|
engineConfiguration->torqueReductionIgnitionRetard = ignitionRetard.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->torqueReductionIgnitionRetard,
|
|
engine_configuration_defaults::TORQUE_REDUCTION_IGNITION_RETARD
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureFuelPressureSensorMode(
|
|
const std::optional<fuel_pressure_sensor_mode_e> fuelPressureSensorMode
|
|
) {
|
|
if (fuelPressureSensorMode.has_value()) {
|
|
engineConfiguration->fuelPressureSensorMode = fuelPressureSensorMode.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->fuelPressureSensorMode,
|
|
engine_configuration_defaults::FUEL_PRESSURE_SENSOR_MODE
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureInjectorFlowAsMassFlow(const std::optional<bool> injectorFlowAsMassFlow) {
|
|
if (injectorFlowAsMassFlow.has_value()) {
|
|
engineConfiguration->injectorFlowAsMassFlow = injectorFlowAsMassFlow.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->injectorFlowAsMassFlow,
|
|
engine_configuration_defaults::INJECTOR_FLOW_AS_MASS_FLOW
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureInjectorFlow(const std::optional<float> flow) {
|
|
if (flow.has_value()) {
|
|
engineConfiguration->injector.flow = flow.value();
|
|
} else {
|
|
ASSERT_EQ(engineConfiguration->injector.flow, engine_configuration_defaults::INJECTOR_FLOW); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureInjectorBattLagCorr(const std::optional<BattLagCorrCurve> battLagCorr) {
|
|
if (battLagCorr.has_value()) {
|
|
std::copy(
|
|
std::begin(battLagCorr.value()),
|
|
std::end(battLagCorr.value()),
|
|
std::begin(engineConfiguration->injector.battLagCorr)
|
|
);
|
|
} else {
|
|
EXPECT_THAT(
|
|
engineConfiguration->injector.battLagCorr,
|
|
testing::ElementsAreArray(engine_configuration_defaults::INJECTOR_BATT_LAG_CURR)
|
|
);
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureFuelReferencePressure(const std::optional<float> fuelReferencePressure) {
|
|
if (fuelReferencePressure.has_value()) {
|
|
engineConfiguration->fuelReferencePressure = fuelReferencePressure.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->fuelReferencePressure,
|
|
engine_configuration_defaults::FUEL_REFERENCE_PRESSURE
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureInjectorCompensationMode(
|
|
const std::optional<injector_compensation_mode_e> injectorCompensationMode
|
|
) {
|
|
if (injectorCompensationMode.has_value()) {
|
|
engineConfiguration->injectorCompensationMode = injectorCompensationMode.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->injectorCompensationMode,
|
|
engine_configuration_defaults::INJECTOR_COMPENSATION_MODE
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureInjectorSecondaryFlow(const std::optional<float> flow) {
|
|
if (flow.has_value()) {
|
|
engineConfiguration->injectorSecondary.flow = flow.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->injectorSecondary.flow,
|
|
engine_configuration_defaults::INJECTOR_SECONDARY_FLOW
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureInjectorSecondaryBattLagCorr(const std::optional<BattLagCorrCurve> battLagCorr) {
|
|
if (battLagCorr.has_value()) {
|
|
std::copy(
|
|
std::begin(battLagCorr.value()),
|
|
std::end(battLagCorr.value()),
|
|
std::begin(engineConfiguration->injectorSecondary.battLagCorr)
|
|
);
|
|
} else {
|
|
EXPECT_THAT(
|
|
engineConfiguration->injectorSecondary.battLagCorr,
|
|
testing::ElementsAreArray(engine_configuration_defaults::INJECTOR_SECONDARY_BATT_LAG_CURR)
|
|
);
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureSecondaryInjectorFuelReferencePressure(
|
|
const std::optional<float> secondaryInjectorFuelReferencePressure
|
|
) {
|
|
if (secondaryInjectorFuelReferencePressure.has_value()) {
|
|
engineConfiguration->secondaryInjectorFuelReferencePressure = secondaryInjectorFuelReferencePressure.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->secondaryInjectorFuelReferencePressure,
|
|
engine_configuration_defaults::SECONDARY_INJECTOR_FUEL_REFERENCE_PRESSURE
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureSecondaryInjectorCompensationMode(
|
|
const std::optional<injector_compensation_mode_e> secondaryInjectorCompensationMode
|
|
) {
|
|
if (secondaryInjectorCompensationMode.has_value()) {
|
|
engineConfiguration->secondaryInjectorCompensationMode = secondaryInjectorCompensationMode.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->secondaryInjectorCompensationMode,
|
|
engine_configuration_defaults::SECONDARY_INJECTOR_COMPENSATION_MODE
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureEnableStagedInjection(const std::optional<bool> isStagedInjectionEnabled) {
|
|
if (isStagedInjectionEnabled.has_value()) {
|
|
engineConfiguration->enableStagedInjection = isStagedInjectionEnabled.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->enableStagedInjection,
|
|
engine_configuration_defaults::ENABLE_STAGED_INJECTION
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureNitrousControlEnabled(const std::optional<bool> nitrousControlEnabled) {
|
|
if (nitrousControlEnabled.has_value()) {
|
|
engineConfiguration->nitrousControlEnabled = nitrousControlEnabled.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->nitrousControlEnabled,
|
|
engine_configuration_defaults::NITROUS_CONTROL_ENABLED
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureNitrousControlArmingMethod(
|
|
const std::optional<nitrousArmingMethod_e> armingMethod
|
|
) {
|
|
if (armingMethod.has_value()) {
|
|
engineConfiguration->nitrousControlArmingMethod = armingMethod.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->nitrousControlArmingMethod,
|
|
engine_configuration_defaults::NITROUS_CONTROL_ARMING_METHOD
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureNitrousControlTriggerPin(const std::optional<switch_input_pin_e> triggerPin) {
|
|
if (triggerPin.has_value()) {
|
|
engineConfiguration->nitrousControlTriggerPin = triggerPin.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->nitrousControlTriggerPin,
|
|
engine_configuration_defaults::NITROUS_CONTROL_TRIGGER_PIN
|
|
); // check default value
|
|
}
|
|
}
|
|
void TestEngineConfiguration::configureNitrousControlTriggerPinInverted(const std::optional<bool> triggerPinInverted) {
|
|
if (triggerPinInverted.has_value()) {
|
|
engineConfiguration->nitrousControlTriggerPinInverted = triggerPinInverted.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->nitrousControlTriggerPinInverted,
|
|
engine_configuration_defaults::NITROUS_CONTROL_TRIGGER_PIN_INVERTED
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureNitrousControlTriggerPinMode(
|
|
const std::optional<pin_input_mode_e> triggerPinMode
|
|
) {
|
|
if (triggerPinMode.has_value()) {
|
|
engineConfiguration->nitrousControlTriggerPinMode = triggerPinMode.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->nitrousControlTriggerPinMode,
|
|
engine_configuration_defaults::NITROUS_CONTROL_TRIGGER_PIN_MODE
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureNitrousLuaGauge(const std::optional<luaGauge_e> luaGauge) {
|
|
if (luaGauge.has_value()) {
|
|
engineConfiguration->nitrousLuaGauge = luaGauge.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->nitrousLuaGauge,
|
|
engine_configuration_defaults::NITROUS_LUA_GAUGE
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureNitrousLuaGaugeMeaning(const std::optional<luaGaugeMeaning_e> luaGaugeMeaning) {
|
|
if (luaGaugeMeaning.has_value()) {
|
|
engineConfiguration->nitrousLuaGaugeMeaning = luaGaugeMeaning.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->nitrousLuaGaugeMeaning,
|
|
engine_configuration_defaults::NITROUS_LUA_GAUGE_MEANING
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
void TestEngineConfiguration::configureNitrousLuaGaugeArmingValue(const std::optional<float> luaGaugeArmingValue) {
|
|
if (luaGaugeArmingValue.has_value()) {
|
|
engineConfiguration->nitrousLuaGaugeArmingValue = luaGaugeArmingValue.value();
|
|
} else {
|
|
ASSERT_EQ(
|
|
engineConfiguration->nitrousLuaGaugeArmingValue,
|
|
engine_configuration_defaults::NITROUS_LUA_GAUGE_ARMING_VALUE
|
|
); // check default value
|
|
}
|
|
}
|
|
|
|
TestEngineConfiguration::TestEngineConfiguration() {
|
|
}
|
|
|
|
TestEngineConfiguration TestEngineConfiguration::instance; |