unit test framework improvements for smoother event execution

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

View File

@ -2,4 +2,5 @@
build/
gcov_working_area
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
* DEPRECATED many usages should be migrated to
*/
void EngineTestHelper::fireRise(float delayMs) {
moveTimeForwardUs(MS2US(delayMs));
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
*/
@ -120,11 +136,6 @@ void EngineTestHelper::firePrimaryTriggerRise() {
engine->triggerCentral.handleShaftSignal(SHAFT_PRIMARY_RISING, nowNt, engine, engine->engineConfigurationPtr, &persistentConfig);
}
void EngineTestHelper::fireFall(float delayMs) {
moveTimeForwardUs(MS2US(delayMs));
firePrimaryTriggerFall();
}
void EngineTestHelper::firePrimaryTriggerFall() {
efitick_t nowNt = getTimeNowNt();
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() {
engine.executor.executeAll(99999999); // this is needed to clear 'isScheduled' flag
ASSERT_EQ( 0, engine.executor.size()) << "Failed to clearQueue";
@ -169,6 +187,13 @@ void EngineTestHelper::moveTimeForwardUs(int 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) {
return timeNowUs;
}

View File

@ -36,8 +36,22 @@ public:
void applyTriggerWaveform();
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 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
@ -49,7 +63,6 @@ public:
void firePrimaryTriggerFall();
void fireTriggerEvents(int count);
void fireTriggerEventsWithDuration(float delayMs);
void fireTriggerEvents2(int count, float delayMs);
void clearQueue();
scheduling_s * assertEvent5(const char *msg, int index, void *callback, efitime_t expectedTimestamp);
@ -65,7 +78,6 @@ public:
int executeActions();
void moveTimeForwardMs(float deltaTimeMs);
void moveTimeForwardUs(int deltaTimeUs);
efitimeus_t getTimeNowUs(void);
void writeEvents(const char *fileName);

View File

@ -14,7 +14,7 @@ TEST(fuelControl, transitionIssue1592) {
WITH_ENGINE_TEST_HELPER(TEST_ENGINE);
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( 100, GET_RPM()) << "spinning-RPM#1";
@ -22,13 +22,13 @@ TEST(fuelControl, transitionIssue1592) {
ASSERT_EQ(IM_SIMULTANEOUS, ENGINE(getCurrentInjectionMode(PASS_ENGINE_PARAMETER_SIGNATURE)));
eth.fireRise(150);
eth.smartFireRise(150);
eth.fireFall(150);
eth.fireRise(150);
eth.smartFireRise(150);
eth.fireFall(150);
eth.fireRise(150);
eth.smartFireRise(150);
eth.fireFall(150);
ASSERT_EQ( 400, GET_RPM()) << "running-RPM#1";