From bec88bf8c8fd5ceda4b9a8b44c331498f8897e6a Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 3 Dec 2019 00:20:47 -0500 Subject: [PATCH] EngineTestHelper progress --- .../controllers/scheduling/event_queue.cpp | 3 +- firmware/controllers/scheduling/event_queue.h | 2 +- unit_tests/engine_test_helper.cpp | 29 +++++++++++++++++++ unit_tests/engine_test_helper.h | 15 +++++----- unit_tests/global_execution_queue.cpp | 2 +- 5 files changed, 40 insertions(+), 11 deletions(-) diff --git a/firmware/controllers/scheduling/event_queue.cpp b/firmware/controllers/scheduling/event_queue.cpp index 3367f6ec1f..47260cb044 100644 --- a/firmware/controllers/scheduling/event_queue.cpp +++ b/firmware/controllers/scheduling/event_queue.cpp @@ -216,7 +216,8 @@ scheduling_s * EventQueue::getHead() { return head; } -scheduling_s *EventQueue::getForUnitText(int index) { +// todo: reduce code duplication with another 'getElementAtIndexForUnitText' +scheduling_s *EventQueue::getElementAtIndexForUnitText(int index) { scheduling_s * current; LL_FOREACH2(head, current, nextScheduling_s) diff --git a/firmware/controllers/scheduling/event_queue.h b/firmware/controllers/scheduling/event_queue.h index 1ab88e45f3..d1789feb0a 100644 --- a/firmware/controllers/scheduling/event_queue.h +++ b/firmware/controllers/scheduling/event_queue.h @@ -58,7 +58,7 @@ public: efitime_t getNextEventTime(efitime_t nowUs) const; void clear(void); int size(void) const; - scheduling_s *getForUnitText(int index); + scheduling_s *getElementAtIndexForUnitText(int index); void setLateDelay(int value); scheduling_s * getHead(); void assertListIsSorted() const; diff --git a/unit_tests/engine_test_helper.cpp b/unit_tests/engine_test_helper.cpp index 4793d17ebe..7cb386b640 100644 --- a/unit_tests/engine_test_helper.cpp +++ b/unit_tests/engine_test_helper.cpp @@ -170,6 +170,35 @@ scheduling_s * EngineTestHelper::assertEvent5(const char *msg, int index, void * return event; } +// todo: reduce code duplication with another 'getElementAtIndexForUnitText' +static AngleBasedEvent * getElementAtIndexForUnitText(int index, Engine *engine) { + AngleBasedEvent * current; + + LL_FOREACH2(engine->ignitionEventsHead, current, nextToothEvent) + { + if (index == 0) + return current; + index--; + } +#if EFI_UNIT_TEST + firmwareError(OBD_PCM_Processor_Fault, "getForUnitText: null"); +#endif /* EFI_UNIT_TEST */ + return NULL; +} + +AngleBasedEvent * EngineTestHelper::assertTriggerEvent(const char *msg, + int index, AngleBasedEvent *expected, + void *callback, + int triggerEventIndex, angle_t angleOffsetFromTriggerEvent) { + AngleBasedEvent * event = getElementAtIndexForUnitText(index, &engine); + + assertEqualsM4(msg, " callback up/down", (void*)event->action.getCallback() == (void*) callback, 1); + + assertEqualsM4(msg, " trigger", triggerEventIndex, event->position.triggerEventIndex); + assertEqualsM4(msg, " angle", angleOffsetFromTriggerEvent, event->position.angleOffsetFromTriggerEvent); + return event; +} + scheduling_s * EngineTestHelper::assertScheduling(const char *msg, int index, scheduling_s *expected, void *callback, efitime_t expectedTimestamp) { scheduling_s * actual = assertEvent5(msg, index, callback, expectedTimestamp); return actual; diff --git a/unit_tests/engine_test_helper.h b/unit_tests/engine_test_helper.h index 36fe344547..41ff1a6547 100644 --- a/unit_tests/engine_test_helper.h +++ b/unit_tests/engine_test_helper.h @@ -2,10 +2,10 @@ * @file engine_test_helper.h * * @date Jun 26, 2014 - * @author Andrey Belomutskiy, (c) 2012-2014 + * @author Andrey Belomutskiy, (c) 2012-2019 */ -#ifndef ENGINE_TEST_HELPER_H_ -#define ENGINE_TEST_HELPER_H_ + +#pragma once #include "engine.h" #include "trigger_central.h" @@ -48,6 +48,9 @@ public: scheduling_s * assertEvent5(const char *msg, int index, void *callback, efitime_t expectedTimestamp); scheduling_s * assertScheduling(const char *msg, int index, scheduling_s *expected, void *callback, efitime_t expectedTimestamp); + + AngleBasedEvent * assertTriggerEvent(const char *msg, int index, AngleBasedEvent *expected, void *callback, int triggerEventIndex, angle_t angleOffsetFromTriggerEvent); + void assertEvent(const char *msg, int index, void *callback, efitime_t momentX, InjectionEvent *event); void assertInjectorUpEvent(const char *msg, int eventIndex, efitime_t momentX, long injectorIndex); void assertInjectorDownEvent(const char *msg, int eventIndex, efitime_t momentX, long injectorIndex); @@ -63,9 +66,5 @@ public: persistent_config_s persistentConfig; }; - void setupSimpleTestEngineWithMafAndTT_ONE_trigger(EngineTestHelper *eth, injection_mode_e injMode = IM_BATCH); -void setupSimpleTestEngineWithMaf(EngineTestHelper *eth, injection_mode_e injectionMode, - trigger_type_e trigger); - -#endif /* ENGINE_TEST_HELPER_H_ */ +void setupSimpleTestEngineWithMaf(EngineTestHelper *eth, injection_mode_e injectionMode, trigger_type_e trigger); diff --git a/unit_tests/global_execution_queue.cpp b/unit_tests/global_execution_queue.cpp index 4048bb00aa..7002988abc 100644 --- a/unit_tests/global_execution_queue.cpp +++ b/unit_tests/global_execution_queue.cpp @@ -30,7 +30,7 @@ int TestExecutor::size() { } scheduling_s* TestExecutor::getForUnitTest(int index) { - return schedulingQueue.getForUnitText(index); + return schedulingQueue.getElementAtIndexForUnitText(index); } void TestExecutor::scheduleByTimestamp(scheduling_s *scheduling, efitimeus_t timeUs, schfunc_t callback, void *param) {