From c4885dcc0e1b6b235116ebcf5e1c079948113c16 Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 20 Jul 2020 11:16:51 -0400 Subject: [PATCH] unit test framework improvements for smoother event execution --- unit_tests/.gitignore | 3 +- unit_tests/engine_test_helper.cpp | 35 ++++++++++++++++--- unit_tests/engine_test_helper.h | 16 +++++++-- .../injection_mode_transition.cpp | 8 ++--- 4 files changed, 50 insertions(+), 12 deletions(-) diff --git a/unit_tests/.gitignore b/unit_tests/.gitignore index 30469214fb..f6319ed794 100644 --- a/unit_tests/.gitignore +++ b/unit_tests/.gitignore @@ -2,4 +2,5 @@ build/ gcov_working_area triggers -triggers.txt \ No newline at end of file +triggers.txt +*.logicdata diff --git a/unit_tests/engine_test_helper.cpp b/unit_tests/engine_test_helper.cpp index 9d03274804..437e5104df 100644 --- a/unit_tests/engine_test_helper.cpp +++ b/unit_tests/engine_test_helper.cpp @@ -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; } diff --git a/unit_tests/engine_test_helper.h b/unit_tests/engine_test_helper.h index 494c533907..0e2e1b0c78 100644 --- a/unit_tests/engine_test_helper.h +++ b/unit_tests/engine_test_helper.h @@ -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); diff --git a/unit_tests/tests/ignition_injection/injection_mode_transition.cpp b/unit_tests/tests/ignition_injection/injection_mode_transition.cpp index 31894e7583..71d6799169 100644 --- a/unit_tests/tests/ignition_injection/injection_mode_transition.cpp +++ b/unit_tests/tests/ignition_injection/injection_mode_transition.cpp @@ -14,7 +14,7 @@ TEST(fuelControl, transitionIssue1592) { WITH_ENGINE_TEST_HELPER(TEST_ENGINE); setupSimpleTestEngineWithMafAndTT_ONE_trigger(ð, 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";