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;
};
#define DEFAULT_MOCK_SPEED -1
class Engine final : public TriggerStateListener {
public:
DECLARE_ENGINE_PTR;
@ -104,6 +106,12 @@ public:
GearControllerBase *gearController;
float mockVehicleSpeed = DEFAULT_MOCK_SPEED; // in kilometers per hour
efitick_t vssLastSignalTimeNt = 0;
efitick_t vssDiff = 0;
efitick_t mostRecentSparkEvent;
efitick_t mostRecentTimeBetweenSparkEvents;
efitick_t mostRecentIgnitionEvent;

View File

@ -7,9 +7,6 @@
#include "vehicle_speed.h"
#define DEFAULT_MOCK_SPEED -1
static float mockVehicleSpeed = DEFAULT_MOCK_SPEED; // in kilometers per hour
#if EFI_VEHICLE_SPEED
@ -19,18 +16,12 @@ static float mockVehicleSpeed = DEFAULT_MOCK_SPEED; // in kilometers per hour
#include "pin_repository.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
*/
float getVehicleSpeed(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
if (mockVehicleSpeed != DEFAULT_MOCK_SPEED)
return mockVehicleSpeed;
if (engine->mockVehicleSpeed != DEFAULT_MOCK_SPEED)
return engine->mockVehicleSpeed;
#if EFI_CAN_SUPPORT
if (CONFIG(enableCanVss)) {
return getVehicleCanSpeed();
@ -39,18 +30,18 @@ float getVehicleSpeed(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
if (!hasVehicleSpeedSensor(PASS_ENGINE_PARAMETER_SIGNATURE))
return 0;
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 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
void vsCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
engine->engineState.vssEventCounter++;
efitick_t nowNt = getTimeNowNt();
vssDiff = nowNt - lastSignalTimeNt;
lastSignalTimeNt = nowNt;
engine->vssDiff = nowNt - engine->vssLastSignalTimeNt;
engine->vssLastSignalTimeNt = nowNt;
}
#if ! EFI_UNIT_TEST
@ -67,7 +58,7 @@ static void speedInfo(void) {
engineConfiguration->vehicleSpeedCoef,
engine->engineState.vssEventCounter,
getVehicleSpeed(PASS_ENGINE_PARAMETER_SIGNATURE));
efiPrintf("vss diff %d", vssDiff);
efiPrintf("vss diff %d", engine->vssDiff);
}
#endif // EFI_UNIT_TEST
@ -136,7 +127,7 @@ float getVehicleSpeed(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
void setMockVehicleSpeed(float speedKPH) {
mockVehicleSpeed = speedKPH;
void setMockVehicleSpeed(float speedKPH DECLARE_ENGINE_PARAMETER_SUFFIX) {
engine->mockVehicleSpeed = speedKPH;
}

View File

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

View File

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

View File

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

View File

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