unit test framework improvements for smoother event execution

This commit is contained in:
rusefi 2020-07-20 11:16:51 -04:00
parent c0725a2082
commit c4885dcc0e
4 changed files with 50 additions and 12 deletions

View File

@ -2,4 +2,5 @@
build/ build/
gcov_working_area gcov_working_area
triggers triggers
triggers.txt triggers.txt
*.logicdata

View File

@ -103,12 +103,28 @@ void EngineTestHelper::writeEvents(const char *fileName) {
/** /**
* mock a change of time and fire single RISE front event * mock a change of time and fire single RISE front event
* DEPRECATED many usages should be migrated to
*/ */
void EngineTestHelper::fireRise(float delayMs) { void EngineTestHelper::fireRise(float delayMs) {
moveTimeForwardUs(MS2US(delayMs)); moveTimeForwardUs(MS2US(delayMs));
firePrimaryTriggerRise(); firePrimaryTriggerRise();
} }
void EngineTestHelper::smartFireRise(float delayMs) {
moveTimeForwardUs(MS2US(delayMs));
firePrimaryTriggerRise();
}
void EngineTestHelper::fireFall(float delayMs) {
moveTimeForwardUs(MS2US(delayMs));
firePrimaryTriggerFall();
}
void EngineTestHelper::smartFireFall(float delayMs) {
moveTimeForwardUs(MS2US(delayMs));
firePrimaryTriggerFall();
}
/** /**
* fire single RISE front event * fire single RISE front event
*/ */
@ -120,11 +136,6 @@ void EngineTestHelper::firePrimaryTriggerRise() {
engine->triggerCentral.handleShaftSignal(SHAFT_PRIMARY_RISING, nowNt, engine, engine->engineConfigurationPtr, &persistentConfig); engine->triggerCentral.handleShaftSignal(SHAFT_PRIMARY_RISING, nowNt, engine, engine->engineConfigurationPtr, &persistentConfig);
} }
void EngineTestHelper::fireFall(float delayMs) {
moveTimeForwardUs(MS2US(delayMs));
firePrimaryTriggerFall();
}
void EngineTestHelper::firePrimaryTriggerFall() { void EngineTestHelper::firePrimaryTriggerFall() {
efitick_t nowNt = getTimeNowNt(); efitick_t nowNt = getTimeNowNt();
Engine *engine = &this->engine; Engine *engine = &this->engine;
@ -149,6 +160,13 @@ void EngineTestHelper::fireTriggerEvents2(int count, float durationMs) {
} }
} }
void EngineTestHelper::smartFireTriggerEvents2(int count, float durationMs) {
for (int i = 0; i < count; i++) {
smartFireRise(durationMs);
smartFireFall(durationMs);
}
}
void EngineTestHelper::clearQueue() { void EngineTestHelper::clearQueue() {
engine.executor.executeAll(99999999); // this is needed to clear 'isScheduled' flag engine.executor.executeAll(99999999); // this is needed to clear 'isScheduled' flag
ASSERT_EQ( 0, engine.executor.size()) << "Failed to clearQueue"; ASSERT_EQ( 0, engine.executor.size()) << "Failed to clearQueue";
@ -169,6 +187,13 @@ void EngineTestHelper::moveTimeForwardUs(int deltaTimeUs) {
timeNowUs += deltaTimeUs; timeNowUs += deltaTimeUs;
} }
void EngineTestHelper::smartMoveTimeForwardUs(int deltaTimeUs) {
if (printTriggerDebug || printFuelDebug) {
printf("moveTimeForwardUs %.1fms\r\n", deltaTimeUs / 1000.0);
}
timeNowUs += deltaTimeUs;
}
efitimeus_t EngineTestHelper::getTimeNowUs(void) { efitimeus_t EngineTestHelper::getTimeNowUs(void) {
return timeNowUs; return timeNowUs;
} }

View File

@ -36,8 +36,22 @@ public:
void applyTriggerWaveform(); void applyTriggerWaveform();
void setTriggerType(trigger_type_e trigger DECLARE_ENGINE_PARAMETER_SUFFIX); void setTriggerType(trigger_type_e trigger DECLARE_ENGINE_PARAMETER_SUFFIX);
/**
* DEPRECATED these methods do not execute events on the queue
*/
void fireRise(float delayMs); void fireRise(float delayMs);
void fireFall(float delayMs); void fireFall(float delayMs);
void moveTimeForwardUs(int deltaTimeUs);
void fireTriggerEvents2(int count, float delayMs);
/**
* these methods execute events while moving time forward
* todo: better naming convention?
*/
void smartFireRise(float delayMs);
void smartFireFall(float delayMs);
void smartMoveTimeForwardUs(int deltaTimeUs);
void smartFireTriggerEvents2(int count, float delayMs);
/** /**
* See also #fireRise() which would also move time forward * See also #fireRise() which would also move time forward
@ -49,7 +63,6 @@ public:
void firePrimaryTriggerFall(); void firePrimaryTriggerFall();
void fireTriggerEvents(int count); void fireTriggerEvents(int count);
void fireTriggerEventsWithDuration(float delayMs); void fireTriggerEventsWithDuration(float delayMs);
void fireTriggerEvents2(int count, float delayMs);
void clearQueue(); void clearQueue();
scheduling_s * assertEvent5(const char *msg, int index, void *callback, efitime_t expectedTimestamp); scheduling_s * assertEvent5(const char *msg, int index, void *callback, efitime_t expectedTimestamp);
@ -65,7 +78,6 @@ public:
int executeActions(); int executeActions();
void moveTimeForwardMs(float deltaTimeMs); void moveTimeForwardMs(float deltaTimeMs);
void moveTimeForwardUs(int deltaTimeUs);
efitimeus_t getTimeNowUs(void); efitimeus_t getTimeNowUs(void);
void writeEvents(const char *fileName); void writeEvents(const char *fileName);

View File

@ -14,7 +14,7 @@ TEST(fuelControl, transitionIssue1592) {
WITH_ENGINE_TEST_HELPER(TEST_ENGINE); WITH_ENGINE_TEST_HELPER(TEST_ENGINE);
setupSimpleTestEngineWithMafAndTT_ONE_trigger(&eth, IM_SEQUENTIAL); setupSimpleTestEngineWithMafAndTT_ONE_trigger(&eth, IM_SEQUENTIAL);
eth.fireTriggerEvents2(4 /* count */ , 600 /* ms */); eth.smartFireTriggerEvents2(4 /* count */ , 600 /* ms */);
ASSERT_EQ(CRANKING, engine->rpmCalculator.getState()); ASSERT_EQ(CRANKING, engine->rpmCalculator.getState());
ASSERT_EQ( 100, GET_RPM()) << "spinning-RPM#1"; ASSERT_EQ( 100, GET_RPM()) << "spinning-RPM#1";
@ -22,13 +22,13 @@ TEST(fuelControl, transitionIssue1592) {
ASSERT_EQ(IM_SIMULTANEOUS, ENGINE(getCurrentInjectionMode(PASS_ENGINE_PARAMETER_SIGNATURE))); ASSERT_EQ(IM_SIMULTANEOUS, ENGINE(getCurrentInjectionMode(PASS_ENGINE_PARAMETER_SIGNATURE)));
eth.fireRise(150); eth.smartFireRise(150);
eth.fireFall(150); eth.fireFall(150);
eth.fireRise(150); eth.smartFireRise(150);
eth.fireFall(150); eth.fireFall(150);
eth.fireRise(150); eth.smartFireRise(150);
eth.fireFall(150); eth.fireFall(150);
ASSERT_EQ( 400, GET_RPM()) << "running-RPM#1"; ASSERT_EQ( 400, GET_RPM()) << "running-RPM#1";