diff --git a/firmware/controllers/system/event_queue.cpp b/firmware/controllers/system/event_queue.cpp index 06684dd8b7..f3fda84bce 100644 --- a/firmware/controllers/system/event_queue.cpp +++ b/firmware/controllers/system/event_queue.cpp @@ -41,7 +41,7 @@ bool EventQueue::checkIfPending(scheduling_s *scheduling) { bool EventQueue::insertTask(scheduling_s *scheduling, efitime_t timeX, schfunc_t callback, void *param) { #if EFI_UNIT_TEST assertListIsSorted(); -#endif +#endif /* EFI_UNIT_TEST */ efiAssert(callback != NULL, "NULL callback", false); if (scheduling->isScheduled) @@ -56,7 +56,7 @@ bool EventQueue::insertTask(scheduling_s *scheduling, efitime_t timeX, schfunc_t LL_PREPEND(head, scheduling); #if EFI_UNIT_TEST assertListIsSorted(); -#endif +#endif /* EFI_UNIT_TEST */ return true; } else { scheduling_s *insertPosition = head; @@ -68,7 +68,7 @@ bool EventQueue::insertTask(scheduling_s *scheduling, efitime_t timeX, schfunc_t insertPosition->next = scheduling; #if EFI_UNIT_TEST assertListIsSorted(); -#endif +#endif /* EFI_UNIT_TEST */ return false; } } diff --git a/unit_tests/test_speed_density.cpp b/unit_tests/test_speed_density.cpp index 7ded6b2ec1..96917d9c39 100644 --- a/unit_tests/test_speed_density.cpp +++ b/unit_tests/test_speed_density.cpp @@ -9,11 +9,15 @@ #include "engine_test_helper.h" #include "speed_density.h" #include "test_speed_density.h" +#include "event_queue.h" + +extern EventQueue schedulingQueue; void testSpeedDensity(void) { printf("*************************************************** testSpeedDensity\r\n"); EngineTestHelper eth(FORD_INLINE_6_1995); EXPAND_EngineTestHelper; + schedulingQueue.clear(); // todo: there must be a better place for this eth.ec->trigger.customTotalToothCount = 8; eth.applyTriggerShape(); diff --git a/unit_tests/test_trigger_decoder.cpp b/unit_tests/test_trigger_decoder.cpp index 1eced597f2..c2effead02 100644 --- a/unit_tests/test_trigger_decoder.cpp +++ b/unit_tests/test_trigger_decoder.cpp @@ -583,6 +583,9 @@ void testFuelSchedulerBug299(void) { EngineTestHelper eth(TEST_ENGINE); EXPAND_EngineTestHelper; assertEquals(LM_PLAIN_MAF, engineConfiguration->algorithm); + engineConfiguration->isIgnitionEnabled = false; + engineConfiguration->specs.cylindersCount = 4; + engineConfiguration->injectionMode = IM_SEQUENTIAL; timeNow = 0; schedulingQueue.clear(); @@ -601,18 +604,42 @@ void testFuelSchedulerBug299(void) { assertEqualsM("RPM=0", 0, eth.engine.rpmCalculator.getRpm(PASS_ENGINE_PARAMETER_F)); + eth.fireTriggerEvents2(2, MS2US(20)); schedulingQueue.executeAll(99999999); // this is needed to clear 'isScheduled' flag engine->iHead = NULL; // let's drop whatever was scheduled just to start from a clean state - eth.fireTriggerEvents2(2, MS2US(20)); + uint32_t start = timeNow; + eth.fireTriggerEvents2(1, MS2US(20)); - assertEqualsM("qs#0", 20, schedulingQueue.size()); + assertEqualsM("qs#0", 4, schedulingQueue.size()); -// assertEqualsM("ev 3", st + 13333 - 1515, schedulingQueue.getForUnitText(0)->momentX); -// assertEqualsM("ev 4", st + 13333 - 1515, schedulingQueue.getForUnitText(1)->momentX); -// assertEqualsM2("ev 5", st + 14277, schedulingQueue.getForUnitText(2)->momentX, 2); + { + scheduling_s *ev = schedulingQueue.getForUnitText(0); + + assertREqualsM("Call@0", (void*)ev->callback, (void*)seTurnPinHigh); + assertEqualsM("ev 0", start + MS2US(24), ev->momentX); + assertEqualsLM("in 0", (long)&enginePins.injectors[3], (long)ev->param); + } + { + scheduling_s *ev = schedulingQueue.getForUnitText(1); + assertREqualsM("Call@1", (void*)ev->callback, (void*)seTurnPinLow); + assertEqualsM("ev 1", start + MS2US(27), ev->momentX); + assertEqualsLM("in 1", (long)&enginePins.injectors[3], (long)ev->param); + } + { + scheduling_s *ev = schedulingQueue.getForUnitText(2); + assertREqualsM("Call@2", (void*)ev->callback, (void*)seTurnPinHigh); + assertEqualsM("ev 2", start + MS2US(34), ev->momentX); + assertEqualsLM("in 2", (long)&enginePins.injectors[1], (long)ev->param); + } + { + scheduling_s *ev = schedulingQueue.getForUnitText(3); + assertREqualsM("Call@3", (void*)ev->callback, (void*)seTurnPinLow); + assertEqualsM("ev 3", start + MS2US(37), ev->momentX); + assertEqualsLM("in 3", (long)&enginePins.injectors[1], (long)ev->param); + } testMafValue = 0; assertEqualsM("maf", 0, getMaf(PASS_ENGINE_PARAMETER_F));