unit test for vehicle_speed.cpp #3081

This commit is contained in:
Andrey 2021-08-03 19:48:24 -04:00
parent 8cffec5c31
commit 8fe2d99254
6 changed files with 34 additions and 35 deletions

View File

@ -81,6 +81,8 @@ protected:
trigger_type_e getType() const override; trigger_type_e getType() const override;
}; };
#define DEFAULT_MOCK_SPEED -1
class Engine final : public TriggerStateListener { class Engine final : public TriggerStateListener {
public: public:
DECLARE_ENGINE_PTR; DECLARE_ENGINE_PTR;
@ -104,6 +106,12 @@ public:
GearControllerBase *gearController; GearControllerBase *gearController;
float mockVehicleSpeed = DEFAULT_MOCK_SPEED; // in kilometers per hour
efitick_t vssLastSignalTimeNt = 0;
efitick_t vssDiff = 0;
efitick_t mostRecentSparkEvent; efitick_t mostRecentSparkEvent;
efitick_t mostRecentTimeBetweenSparkEvents; efitick_t mostRecentTimeBetweenSparkEvents;
efitick_t mostRecentIgnitionEvent; efitick_t mostRecentIgnitionEvent;

View File

@ -7,9 +7,6 @@
#include "vehicle_speed.h" #include "vehicle_speed.h"
#define DEFAULT_MOCK_SPEED -1
static float mockVehicleSpeed = DEFAULT_MOCK_SPEED; // in kilometers per hour
#if EFI_VEHICLE_SPEED #if EFI_VEHICLE_SPEED
@ -19,18 +16,12 @@ static float mockVehicleSpeed = DEFAULT_MOCK_SPEED; // in kilometers per hour
#include "pin_repository.h" #include "pin_repository.h"
#include "can_vss.h" #include "can_vss.h"
// todo: move from static into Engine GOD object in order for tests reset
static efitick_t lastSignalTimeNt = 0;
static efitick_t vssDiff = 0;
/** /**
* @return vehicle speed, in kilometers per hour * @return vehicle speed, in kilometers per hour
*/ */
float getVehicleSpeed(DECLARE_ENGINE_PARAMETER_SIGNATURE) { float getVehicleSpeed(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
if (mockVehicleSpeed != DEFAULT_MOCK_SPEED) if (engine->mockVehicleSpeed != DEFAULT_MOCK_SPEED)
return mockVehicleSpeed; return engine->mockVehicleSpeed;
#if EFI_CAN_SUPPORT #if EFI_CAN_SUPPORT
if (CONFIG(enableCanVss)) { if (CONFIG(enableCanVss)) {
return getVehicleCanSpeed(); return getVehicleCanSpeed();
@ -39,18 +30,18 @@ float getVehicleSpeed(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
if (!hasVehicleSpeedSensor(PASS_ENGINE_PARAMETER_SIGNATURE)) if (!hasVehicleSpeedSensor(PASS_ENGINE_PARAMETER_SIGNATURE))
return 0; return 0;
efitick_t nowNt = getTimeNowNt(); efitick_t nowNt = getTimeNowNt();
if (nowNt - lastSignalTimeNt > NT_PER_SECOND) if (nowNt - engine->vssLastSignalTimeNt > NT_PER_SECOND)
return 0; // previous signal time is too long ago - we are stopped return 0; // previous signal time is too long ago - we are stopped
return engineConfiguration->vehicleSpeedCoef * NT_PER_SECOND / vssDiff; return engineConfiguration->vehicleSpeedCoef * NT_PER_SECOND / engine->vssDiff;
} }
// todo: make this method public and invoke this method from test // todo: make this method public and invoke this method from test
void vsCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { void vsCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
engine->engineState.vssEventCounter++; engine->engineState.vssEventCounter++;
efitick_t nowNt = getTimeNowNt(); efitick_t nowNt = getTimeNowNt();
vssDiff = nowNt - lastSignalTimeNt; engine->vssDiff = nowNt - engine->vssLastSignalTimeNt;
lastSignalTimeNt = nowNt; engine->vssLastSignalTimeNt = nowNt;
} }
#if ! EFI_UNIT_TEST #if ! EFI_UNIT_TEST
@ -67,7 +58,7 @@ static void speedInfo(void) {
engineConfiguration->vehicleSpeedCoef, engineConfiguration->vehicleSpeedCoef,
engine->engineState.vssEventCounter, engine->engineState.vssEventCounter,
getVehicleSpeed(PASS_ENGINE_PARAMETER_SIGNATURE)); getVehicleSpeed(PASS_ENGINE_PARAMETER_SIGNATURE));
efiPrintf("vss diff %d", vssDiff); efiPrintf("vss diff %d", engine->vssDiff);
} }
#endif // EFI_UNIT_TEST #endif // EFI_UNIT_TEST
@ -136,7 +127,7 @@ float getVehicleSpeed(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
void setMockVehicleSpeed(float speedKPH) { void setMockVehicleSpeed(float speedKPH DECLARE_ENGINE_PARAMETER_SUFFIX) {
mockVehicleSpeed = speedKPH; engine->mockVehicleSpeed = speedKPH;
} }

View File

@ -14,7 +14,7 @@
*/ */
float getVehicleSpeed(DECLARE_ENGINE_PARAMETER_SIGNATURE); float getVehicleSpeed(DECLARE_ENGINE_PARAMETER_SIGNATURE);
void initVehicleSpeed(); void initVehicleSpeed();
void setMockVehicleSpeed(float speedKPH); void setMockVehicleSpeed(float speedKPH DECLARE_ENGINE_PARAMETER_SUFFIX);
bool hasVehicleSpeedSensor(DECLARE_ENGINE_PARAMETER_SIGNATURE); bool hasVehicleSpeedSensor(DECLARE_ENGINE_PARAMETER_SIGNATURE);
void stopVSSPins(void); void stopVSSPins(void);
void startVSSPins(void); void startVSSPins(void);

View File

@ -30,11 +30,11 @@ TEST(DynoView, VSS_T1) {
engineConfiguration->vehicleWeight = 900; engineConfiguration->vehicleWeight = 900;
eth.moveTimeForwardMs(50); eth.moveTimeForwardMs(50);
setMockVehicleSpeed(18.0); setMockVehicleSpeed(18.0 PASS_ENGINE_PARAMETER_SUFFIX);
dut.update(ICU); dut.update(ICU);
eth.moveTimeForwardAndInvokeEventsSec(20); eth.moveTimeForwardAndInvokeEventsSec(20);
setMockVehicleSpeed(126.0); setMockVehicleSpeed(126.0 PASS_ENGINE_PARAMETER_SUFFIX);
dut.update(ICU); dut.update(ICU);
ASSERT_EQ(1.5, dut.getAcceleration()); ASSERT_EQ(1.5, dut.getAcceleration());
@ -50,7 +50,7 @@ TEST(DynoView, algo) {
engineConfiguration->vehicleWeight = 900; engineConfiguration->vehicleWeight = 900;
//to capture vss //to capture vss
setMockVehicleSpeed(35*3.6); setMockVehicleSpeed(35*3.6 PASS_ENGINE_PARAMETER_SUFFIX);
dut.update(ICU); dut.update(ICU);
dut.setAcceleration(1.5); dut.setAcceleration(1.5);
@ -76,12 +76,12 @@ TEST(DynoView, VSS_fast) {
engine->rpmCalculator.mockRpm = 2200; engine->rpmCalculator.mockRpm = 2200;
eth.moveTimeForwardMs(50); eth.moveTimeForwardMs(50);
setMockVehicleSpeed(50.0); setMockVehicleSpeed(50.0 PASS_ENGINE_PARAMETER_SUFFIX);
dut.update(CAN); dut.update(CAN);
//delay 50ms //delay 50ms
eth.moveTimeForwardMs(50); eth.moveTimeForwardMs(50);
setMockVehicleSpeed(50.252); setMockVehicleSpeed(50.252 PASS_ENGINE_PARAMETER_SUFFIX);
dut.update(CAN); dut.update(CAN);
ASSERT_EQ(1259, dut.getEngineForce()); ASSERT_EQ(1259, dut.getEngineForce());
@ -100,12 +100,12 @@ TEST(DynoView, VSS_Torque) {
engine->rpmCalculator.mockRpm = 2200; engine->rpmCalculator.mockRpm = 2200;
eth.moveTimeForwardMs(50); eth.moveTimeForwardMs(50);
setMockVehicleSpeed(80.0); setMockVehicleSpeed(80.0 PASS_ENGINE_PARAMETER_SUFFIX);
dut.update(CAN); dut.update(CAN);
//delay 50ms //delay 50ms
eth.moveTimeForwardMs(50); eth.moveTimeForwardMs(50);
setMockVehicleSpeed(80.504); setMockVehicleSpeed(80.504 PASS_ENGINE_PARAMETER_SUFFIX);
dut.update(CAN); dut.update(CAN);
ASSERT_EQ(242, dut.getEngineTorque()); ASSERT_EQ(242, dut.getEngineTorque());

View File

@ -425,7 +425,7 @@ TEST(idle_v2, IntegrationManual) {
float expectedClt = 37; float expectedClt = 37;
Sensor::setMockValue(SensorType::DriverThrottleIntent, expectedTps.Value); Sensor::setMockValue(SensorType::DriverThrottleIntent, expectedTps.Value);
Sensor::setMockValue(SensorType::Clt, expectedClt); Sensor::setMockValue(SensorType::Clt, expectedClt);
setMockVehicleSpeed(15); setMockVehicleSpeed(15 PASS_ENGINE_PARAMETER_SUFFIX);
ENGINE(rpmCalculator.mockRpm) = 950; ENGINE(rpmCalculator.mockRpm) = 950;
// Target of 1000 rpm // Target of 1000 rpm
@ -460,7 +460,7 @@ TEST(idle_v2, IntegrationAutomatic) {
float expectedClt = 37; float expectedClt = 37;
Sensor::setMockValue(SensorType::DriverThrottleIntent, expectedTps.Value); Sensor::setMockValue(SensorType::DriverThrottleIntent, expectedTps.Value);
Sensor::setMockValue(SensorType::Clt, expectedClt); Sensor::setMockValue(SensorType::Clt, expectedClt);
setMockVehicleSpeed(15); setMockVehicleSpeed(15 PASS_ENGINE_PARAMETER_SUFFIX);
ENGINE(rpmCalculator.mockRpm) = 950; ENGINE(rpmCalculator.mockRpm) = 950;
// Target of 1000 rpm // Target of 1000 rpm
@ -498,7 +498,7 @@ TEST(idle_v2, IntegrationClamping) {
float expectedClt = 37; float expectedClt = 37;
Sensor::setMockValue(SensorType::DriverThrottleIntent, expectedTps.Value); Sensor::setMockValue(SensorType::DriverThrottleIntent, expectedTps.Value);
Sensor::setMockValue(SensorType::Clt, expectedClt); Sensor::setMockValue(SensorType::Clt, expectedClt);
setMockVehicleSpeed(15); setMockVehicleSpeed(15 PASS_ENGINE_PARAMETER_SUFFIX);
ENGINE(rpmCalculator.mockRpm) = 950; ENGINE(rpmCalculator.mockRpm) = 950;
// Target of 1000 rpm // Target of 1000 rpm

View File

@ -37,10 +37,10 @@ TEST(LaunchControl, VSSCondition) {
engineConfiguration->launchActivationMode = ALWAYS_ACTIVE_LAUNCH; engineConfiguration->launchActivationMode = ALWAYS_ACTIVE_LAUNCH;
engineConfiguration->launchSpeedTreshold = 30; engineConfiguration->launchSpeedTreshold = 30;
engineConfiguration->launchDisableBySpeed = 1; engineConfiguration->launchDisableBySpeed = 1;
setMockVehicleSpeed(10); setMockVehicleSpeed(10 PASS_ENGINE_PARAMETER_SUFFIX);
EXPECT_TRUE(dut.isInsideSpeedCondition()); EXPECT_TRUE(dut.isInsideSpeedCondition());
setMockVehicleSpeed(40); setMockVehicleSpeed(40 PASS_ENGINE_PARAMETER_SUFFIX);
EXPECT_FALSE(dut.isInsideSpeedCondition()); EXPECT_FALSE(dut.isInsideSpeedCondition());
} }
@ -116,7 +116,7 @@ TEST(LaunchControl, CombinedCondition) {
//valid TPS //valid TPS
Sensor::setMockValue(SensorType::DriverThrottleIntent, 20.0f); Sensor::setMockValue(SensorType::DriverThrottleIntent, 20.0f);
setMockVehicleSpeed(10); setMockVehicleSpeed(10 PASS_ENGINE_PARAMETER_SUFFIX);
engine->rpmCalculator.mockRpm = 1200; engine->rpmCalculator.mockRpm = 1200;
EXPECT_FALSE(dut.isLaunchConditionMet(1200)); EXPECT_FALSE(dut.isLaunchConditionMet(1200));
@ -124,7 +124,7 @@ TEST(LaunchControl, CombinedCondition) {
engine->rpmCalculator.mockRpm = 3200; engine->rpmCalculator.mockRpm = 3200;
EXPECT_TRUE(dut.isLaunchConditionMet(3200)); EXPECT_TRUE(dut.isLaunchConditionMet(3200));
setMockVehicleSpeed(40); setMockVehicleSpeed(40 PASS_ENGINE_PARAMETER_SUFFIX);
EXPECT_FALSE(dut.isLaunchConditionMet(3200)); EXPECT_FALSE(dut.isLaunchConditionMet(3200));
} }
@ -148,7 +148,7 @@ TEST(LaunchControl, CompleteRun) {
//valid TPS //valid TPS
Sensor::setMockValue(SensorType::DriverThrottleIntent, 20.0f); Sensor::setMockValue(SensorType::DriverThrottleIntent, 20.0f);
setMockVehicleSpeed(10); setMockVehicleSpeed(10 PASS_ENGINE_PARAMETER_SUFFIX);
engine->rpmCalculator.mockRpm = 1200; engine->rpmCalculator.mockRpm = 1200;
//update condition check //update condition check
@ -186,7 +186,7 @@ TEST(LaunchControl, CompleteRun) {
EXPECT_TRUE(spark); EXPECT_TRUE(spark);
EXPECT_FALSE(fuel); EXPECT_FALSE(fuel);
setMockVehicleSpeed(40); setMockVehicleSpeed(40 PASS_ENGINE_PARAMETER_SUFFIX);
updateLaunchConditions(PASS_ENGINE_PARAMETER_SIGNATURE); updateLaunchConditions(PASS_ENGINE_PARAMETER_SIGNATURE);
spark = false; spark = false;
fuel = false; fuel = false;