Line | Branch | Decision | Exec | Source |
---|---|---|---|---|
1 | /* | |||
2 | * @file test_close_loop_idle.cpp | |||
3 | * | |||
4 | * @date: jun 18, 2025 | |||
5 | * @author FDSoftware | |||
6 | */ | |||
7 | ||||
8 | #include "pch.h" | |||
9 | #include "closed_loop_idle.h" | |||
10 | ||||
11 | using ::testing::StrictMock; | |||
12 | using ::testing::Eq; | |||
13 | using ::testing::_; | |||
14 | ||||
15 | using ICP = IIdleController::Phase; | |||
16 | using TgtInfo = IIdleController::TargetInfo; | |||
17 | ||||
18 | class MockIdleLTIT : public MockIdleController { | |||
19 | public: | |||
20 | bool useClosedLoop = true; | |||
21 | ICP m_lastPhase = ICP::Cranking; | |||
22 | ||||
23 | 6 | ICP getCurrentPhase() const { | ||
24 | 6 | return m_lastPhase; | ||
25 | } | |||
26 | 5 | TgtInfo getTargetRpm(float clt){ | ||
27 | 5 | TgtInfo targetInfo; | ||
28 | 5 | targetInfo.ClosedLoopTarget = 950; | ||
29 | 5 | targetInfo.IdleEntryRpm = 900; | ||
30 | 5 | targetInfo.IdleExitRpm = 1100; | ||
31 | ||||
32 | 5 | return targetInfo; | ||
33 | } | |||
34 | }; | |||
35 | ||||
36 | 4 | TEST(LongTermIdleTrim, isValidConditionsForLearning){ | ||
37 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
38 | // idle config | |||
39 | 1 | engineConfiguration->idleMode = idle_mode_e::IM_AUTO; | ||
40 | ||||
41 | // ltit config | |||
42 | 1 | engineConfiguration->ltitEnabled = true; | ||
43 | 1 | engineConfiguration->ltitStableRpmThreshold = 50; // +-50 rpm | ||
44 | 1 | engineConfiguration->ltitStableTime = 1; // second | ||
45 | 1 | engineConfiguration->ltitIgnitionOnDelay = 1; // second | ||
46 | 1 | engineConfiguration->ltitIntegratorThreshold = 4; // % ? | ||
47 | ||||
48 | 1 | constexpr int mocked_rpm = 920; | ||
49 | ||||
50 |
1/1✓ Branch 2 taken 1 time.
|
1 | StrictMock<MockIdleLTIT> idler; | |
51 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->engineModules.get<IdleController>().set(&idler); | |
52 | 1 | idler.m_lastPhase = ICP::Idling; | ||
53 | ||||
54 | // LTIT not initialized | |||
55 |
2/7✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.isValidConditionsForLearning(4.5f)); | |
56 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.loadLtitFromConfig(); | |
57 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.onIgnitionStateChanged(true); | |
58 | ||||
59 |
1/1✓ Branch 1 taken 1 time.
|
1 | advanceTimeUs(MS2US(500)); | |
60 | // not enough time has passed yet to fulfill ltitIgnitionOnDelay | |||
61 |
2/7✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.isValidConditionsForLearning(4.5f)); | |
62 | ||||
63 | // integrator too low | |||
64 |
2/7✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.isValidConditionsForLearning(3.0f)); | |
65 | ||||
66 | // integrator too high | |||
67 |
2/7✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.isValidConditionsForLearning(-30.f)); | |
68 | ||||
69 | // isStableIdle update | |||
70 |
1/1✓ Branch 1 taken 1 time.
|
1 | advanceTimeUs(MS2US(1000)); | |
71 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.update(mocked_rpm,0,false,false,false,0.45); | |
72 |
2/7✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_TRUE(engine->m_ltit.isValidConditionsForLearning(4.5f)); | |
73 | 2 | }; | ||
74 | ||||
75 | 4 | TEST(LongTermIdleTrim, onIgnitionStateChanged) { | ||
76 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
77 | 1 | engine->m_ltit.isStableIdle = true; | ||
78 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.onIgnitionStateChanged(true); | |
79 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.isStableIdle); | |
80 | ||||
81 | 1 | engine->m_ltit.updatedLtit = true; | ||
82 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.onIgnitionStateChanged(false); | |
83 |
1/6✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 7 not taken.
✗ Branch 12 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
|
1 | EXPECT_TRUE(engine->m_ltit.m_pendingSave); | |
84 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.updatedLtit); | |
85 | 2 | } | ||
86 | ||||
87 | ||||
88 | 4 | TEST(LongTermIdleTrim, checkIfShouldSave) { | ||
89 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
90 | 1 | engineConfiguration->ltitIgnitionOffSaveDelay = 2; | ||
91 | ||||
92 | // update m_pendingSave | |||
93 | 1 | engine->m_ltit.updatedLtit = true; | ||
94 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.onIgnitionStateChanged(false); | |
95 | ||||
96 | // not enough time has passed yet to fulfill ltitIgnitionOffSaveDelay | |||
97 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.checkIfShouldSave(); | |
98 |
1/6✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 7 not taken.
✗ Branch 12 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
|
1 | EXPECT_TRUE(engine->m_ltit.m_pendingSave); | |
99 | ||||
100 |
1/1✓ Branch 1 taken 1 time.
|
1 | advanceTimeUs(MS2US(2500)); | |
101 | ||||
102 | // now we can save the table | |||
103 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.checkIfShouldSave(); | |
104 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.m_pendingSave); | |
105 | 2 | } | ||
106 | ||||
107 | 4 | TEST(LongTermIdleTrim, hasValidData) { | ||
108 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
109 | ||||
110 | // controller not initialized | |||
111 |
2/7✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.hasValidData()); | |
112 | ||||
113 | 1 | setArrayValues(config->ltitTable, 100); | ||
114 | ||||
115 | // correct data | |||
116 |
2/7✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_TRUE(engine->m_ltit.hasValidData()); | |
117 | ||||
118 | // Now we break almost the entire table with invalid values | |||
119 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 time.
|
2/2✓ Decision 'true' taken 6 times.
✓ Decision 'false' taken 1 time.
|
7 | for (int i = 0; i < LTIT_TABLE_SIZE - 2 ; i++) { |
120 | 6 | config->ltitTable[i] = 200; | ||
121 | } | |||
122 |
2/7✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.hasValidData()); | |
123 | 2 | } | ||
124 | ||||
125 | 4 | TEST(LongTermIdleTrim, loadLtitFromConfig) { | ||
126 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
127 | 1 | setArrayValues(config->ltitTable, 105); | ||
128 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.loadLtitFromConfig(); | |
129 |
1/6✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 7 not taken.
✗ Branch 12 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
|
1 | EXPECT_TRUE(engine->m_ltit.ltitTableInitialized); | |
130 |
2/6✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
|
1 | EXPECT_EQ(engine->m_ltit.ltitTableHelper[0], 105); | |
131 | 2 | } | ||
132 | ||||
133 | 4 | TEST(LongTermIdleTrim, getLtitFactor) { | ||
134 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
135 | 1 | constexpr auto mocked_rpm = 920; | ||
136 | 1 | constexpr auto mocked_temp = 45.5; | ||
137 | // default is false pre-load, but we need to be explicit for LCOV | |||
138 | 1 | engine->m_ltit.ltitTableInitialized = false; | ||
139 | ||||
140 |
3/7✓ Branch 4 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(engine->m_ltit.getLtitFactor(mocked_rpm, mocked_temp), 1); | |
141 | ||||
142 | 1 | setArrayValues(config->ltitTable, 105); | ||
143 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.loadLtitFromConfig(); | |
144 |
3/7✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
|
1 | EXPECT_NEAR(engine->m_ltit.getLtitFactor(mocked_rpm, mocked_temp), 1.05, EPS4D); | |
145 | 2 | } | ||
146 | ||||
147 | // from here to the bottom of the file we test all the branches of "update" function, so expect a lot of test more or less similar! | |||
148 | ||||
149 | class mockedLTIT : public LongTermIdleTrim { | |||
150 | public: | |||
151 | 2 | MOCK_METHOD(void, loadLtitFromConfig, (), (override)); | ||
152 | }; | |||
153 | ||||
154 | 4 | TEST(LongTermIdleTrim, update_not_enabled) { | ||
155 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
156 | 1 | engineConfiguration->ltitEnabled = false; | ||
157 | 1 | constexpr int mocked_rpm = 920; | ||
158 | ||||
159 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.update(mocked_rpm,0,false,false,false,0.45); | |
160 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.updatedLtit); | |
161 | 2 | } | ||
162 | ||||
163 | 4 | TEST(LongTermIdleTrim, update_not_Initialized) { | ||
164 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
165 | 1 | engineConfiguration->ltitEnabled = true; | ||
166 | 1 | constexpr int mocked_rpm = 920; | ||
167 |
1/1✓ Branch 2 taken 1 time.
|
1 | mockedLTIT ltit_controller; | |
168 | ||||
169 |
3/3✓ Branch 2 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
|
1 | EXPECT_CALL(ltit_controller, loadLtitFromConfig()); | |
170 |
1/1✓ Branch 1 taken 1 time.
|
1 | ltit_controller.update(mocked_rpm,0,false,false,false,0.45); | |
171 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_FALSE(ltit_controller.updatedLtit); | |
172 | 2 | } | ||
173 | ||||
174 | 4 | TEST(LongTermIdleTrim, update_ignition_delay) { | ||
175 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
176 | 1 | engineConfiguration->ltitIgnitionOnDelay = 1; // second | ||
177 | 1 | engineConfiguration->ltitEnabled = true; | ||
178 | 1 | engine->m_ltit.isStableIdle = true; | ||
179 | 1 | constexpr int mocked_rpm = 920; | ||
180 | ||||
181 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.loadLtitFromConfig(); | |
182 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.onIgnitionStateChanged(true); | |
183 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.update(mocked_rpm,0,false,false,false,0.45); | |
184 | ||||
185 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.updatedLtit); | |
186 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.isStableIdle); | |
187 | 2 | } | ||
188 | ||||
189 | 4 | TEST(LongTermIdleTrim, update_idle) { | ||
190 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
191 | 1 | engineConfiguration->ltitIgnitionOnDelay = 1; // second | ||
192 | 1 | engineConfiguration->ltitStableTime = 2; | ||
193 | 1 | engineConfiguration->ltitStableRpmThreshold = 50; // +-50 rpm | ||
194 | 1 | engineConfiguration->ltitEnabled = true; | ||
195 | 1 | engine->m_ltit.isStableIdle = true; | ||
196 | 1 | constexpr int mocked_rpm = 920; | ||
197 | ||||
198 |
1/1✓ Branch 2 taken 1 time.
|
1 | StrictMock<MockIdleLTIT> idler; | |
199 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->engineModules.get<IdleController>().set(&idler); | |
200 | ||||
201 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.loadLtitFromConfig(); | |
202 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.onIgnitionStateChanged(true); | |
203 | ||||
204 |
1/1✓ Branch 1 taken 1 time.
|
1 | advanceTimeUs(MS2US(1500)); | |
205 | 1 | idler.m_lastPhase = ICP::Running; | ||
206 | ||||
207 | // Phase::Idling expect | |||
208 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.update(mocked_rpm, 0, false, false, false, 0.45); | |
209 | ||||
210 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.updatedLtit); | |
211 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.isStableIdle); | |
212 | ||||
213 | // rpm range expect | |||
214 | 1 | idler.m_lastPhase = ICP::Idling; | ||
215 | // rpm too high for learn! | |||
216 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.update(mocked_rpm + 200, 0, false, false, false, 0.45); | |
217 | ||||
218 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.updatedLtit); | |
219 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.isStableIdle); | |
220 | ||||
221 | // stable idle check (false & still not in time) | |||
222 | 1 | engine->m_ltit.isStableIdle = false; | ||
223 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.update(mocked_rpm, 0, false, false, false, 0.45); | |
224 | ||||
225 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.updatedLtit); | |
226 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.isStableIdle); | |
227 | ||||
228 | // stable idle check (false & still now in time) | |||
229 | 1 | engine->m_ltit.isStableIdle = false; | ||
230 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.onIgnitionStateChanged(true); | |
231 |
1/1✓ Branch 1 taken 1 time.
|
1 | advanceTimeUs(MS2US(2500)); | |
232 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.update(mocked_rpm, 0, false, false, false, 0.45); | |
233 | ||||
234 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.updatedLtit); | |
235 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_TRUE(engine->m_ltit.isStableIdle); | |
236 | ||||
237 | 2 | } | ||
238 | ||||
239 | 4 | TEST(LongTermIdleTrim, update) { | ||
240 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
241 | // idle config | |||
242 | 1 | engineConfiguration->idleMode = idle_mode_e::IM_AUTO; | ||
243 | ||||
244 | // ltit config | |||
245 | 1 | engineConfiguration->ltitEnabled = true; | ||
246 | 1 | engineConfiguration->ltitStableRpmThreshold = 50; // +-50 rpm | ||
247 | 1 | engineConfiguration->ltitStableTime = 1; // second | ||
248 | 1 | engineConfiguration->ltitIgnitionOnDelay = 1; // second | ||
249 | 1 | engineConfiguration->ltitIntegratorThreshold = 4; // % ? | ||
250 | 1 | setArrayValues(config->ltitTable, 105); | ||
251 | ||||
252 | 1 | constexpr int mocked_rpm = 920; | ||
253 | 1 | constexpr int mocked_temp = 45.5; | ||
254 | ||||
255 |
1/1✓ Branch 2 taken 1 time.
|
1 | StrictMock<MockIdleLTIT> idler; | |
256 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->engineModules.get<IdleController>().set(&idler); | |
257 | 1 | idler.m_lastPhase = ICP::Idling; | ||
258 | 1 | idler.useClosedLoop = true; | ||
259 | ||||
260 | // LTIT not initialized | |||
261 |
2/7✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.isValidConditionsForLearning(4.5f)); | |
262 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.loadLtitFromConfig(); | |
263 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.onIgnitionStateChanged(true); | |
264 | ||||
265 | // idle controller isIdleClosedLoop | |||
266 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->engineModules.get<IdleController>()->isIdleClosedLoop = true; | |
267 | ||||
268 |
1/1✓ Branch 1 taken 1 time.
|
1 | advanceTimeUs(MS2US(2500)); | |
269 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.update(mocked_rpm, mocked_temp, false, false, false, 4.5); | |
270 |
2/6✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
|
1 | EXPECT_NEAR(engine->m_ltit.ltitTableHelper[0], 105, EPS4D); | |
271 |
1/6✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 7 not taken.
✗ Branch 12 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
|
1 | EXPECT_TRUE(engine->m_ltit.updatedLtit); | |
272 | 2 | } | ||
273 | ||||
274 | //TODO: this func is unused: | |||
275 | 4 | TEST(LongTermIdleTrim, smoothLtitTable){ | ||
276 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
277 | // ltit config | |||
278 | 1 | engineConfiguration->ltitEnabled = true; | ||
279 | 1 | setArrayValues(engine->m_ltit.ltitTableHelper, 100); | ||
280 | ||||
281 | // randomize a bit the table: | |||
282 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 1 time.
|
2/2✓ Decision 'true' taken 8 times.
✓ Decision 'false' taken 1 time.
|
9 | for(size_t i = 0; i < LTIT_TABLE_SIZE; i++){ |
283 | 8 | engine->m_ltit.ltitTableHelper[i] = engine->m_ltit.ltitTableHelper[i] + (5 * i); | ||
284 | } | |||
285 | ||||
286 | // invalid factor: | |||
287 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.smoothLtitTable(180); | |
288 |
1/6✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_FALSE(engine->m_ltit.m_pendingSave); | |
289 | ||||
290 | // valid factor | |||
291 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->m_ltit.smoothLtitTable(45); | |
292 |
2/6✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
|
1 | EXPECT_EQ(engine->m_ltit.ltitTableHelper[0], 101.125); | |
293 |
2/6✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
|
1 | EXPECT_EQ(engine->m_ltit.ltitTableHelper[1], 105); | |
294 |
2/6✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
|
1 | EXPECT_EQ(engine->m_ltit.ltitTableHelper[3], 115); | |
295 |
1/6✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 7 not taken.
✗ Branch 12 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
|
1 | EXPECT_TRUE(engine->m_ltit.m_pendingSave); | |
296 | 2 | } | ||
297 |