Line | Branch | Decision | Exec | Source |
---|---|---|---|---|
1 | /** | |||
2 | * @file test_trigger_decoder.cpp | |||
3 | * | |||
4 | * @date Dec 24, 2013 | |||
5 | * @author Andrey Belomutskiy, (c) 2012-2020 | |||
6 | */ | |||
7 | ||||
8 | #include "pch.h" | |||
9 | ||||
10 | #include "trigger_decoder.h" | |||
11 | #include "ford_aspire.h" | |||
12 | #include "dodge_neon.h" | |||
13 | #include "ford_1995_inline_6.h" | |||
14 | #include "event_queue.h" | |||
15 | #include "trigger_mazda.h" | |||
16 | #include "trigger_chrysler.h" | |||
17 | #include "speed_density.h" | |||
18 | #include "fuel_math.h" | |||
19 | #include "spark_logic.h" | |||
20 | #include "trigger_universal.h" | |||
21 | #include "engine_configuration_defaults.h" | |||
22 | ||||
23 | using ::testing::_; | |||
24 | ||||
25 | 2 | static int getTriggerZeroEventIndex(engine_type_e engineType) { | ||
26 |
1/1✓ Branch 2 taken 2 times.
|
2 | EngineTestHelper eth(engineType); | |
27 | ||||
28 |
1/1✓ Branch 1 taken 2 times.
|
2 | initDataStructures(); | |
29 | ||||
30 | 2 | const auto& triggerConfiguration = engine->triggerCentral.primaryTriggerConfiguration; | ||
31 | ||||
32 | 2 | TriggerWaveform& shape = eth.engine.triggerCentral.triggerShape; | ||
33 |
1/1✓ Branch 1 taken 2 times.
|
4 | return eth.engine.triggerCentral.triggerState.findTriggerZeroEventIndex(shape, triggerConfiguration); | |
34 | 2 | } | ||
35 | ||||
36 | 4 | TEST(trigger, testSkipped2_0) { | ||
37 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
38 | // for this test we need a trigger with isSynchronizationNeeded=true | |||
39 | 1 | engineConfiguration->trigger.customTotalToothCount = 2; | ||
40 | 1 | engineConfiguration->trigger.customSkippedToothCount = 0; | ||
41 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.setTriggerType(trigger_type_e::TT_TOOTHED_WHEEL); | |
42 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 0, round(Sensor::getOrZero(SensorType::Rpm))) << "testNoStartUpWarnings RPM"; | |
43 | 1 | } | ||
44 | ||||
45 | 4 | TEST(trigger, testSomethingWeird) { | ||
46 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::FORD_INLINE_6_1995); | |
47 | ||||
48 |
1/1✓ Branch 2 taken 1 time.
|
1 | TriggerDecoderBase state_("test"); | |
49 | ||||
50 | 1 | const auto& triggerConfiguration = engine->triggerCentral.primaryTriggerConfiguration; | ||
51 | ||||
52 |
2/9✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_FALSE(state_.shaft_is_synchronized) << "shaft_is_synchronized"; | |
53 | 1 | int r = 10; | ||
54 |
1/1✓ Branch 1 taken 1 time.
|
1 | state_.decodeTriggerEvent("t", engine->triggerCentral.triggerShape, /* override */ nullptr, triggerConfiguration, SHAFT_PRIMARY_RISING, ++r); | |
55 |
2/8✗ 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.
✓ Branch 28 taken 1 time.
✗ Branch 29 not taken.
|
1 | ASSERT_TRUE(state_.shaft_is_synchronized); // first signal rise synchronize | |
56 |
4/9✓ Branch 3 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.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(0, state_.getCurrentIndex()); | |
57 | ||||
58 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 time.
|
2/2✓ Decision 'true' taken 4 times.
✓ Decision 'false' taken 1 time.
|
5 | for (int i = 2; i < 10; i += 2) { |
59 |
1/1✓ Branch 1 taken 4 times.
|
4 | state_.decodeTriggerEvent("t", engine->triggerCentral.triggerShape, /* override */ nullptr, triggerConfiguration, SHAFT_PRIMARY_RISING, r++); | |
60 |
4/10✓ Branch 2 taken 4 times.
✓ Branch 5 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 4 times.
✗ Branch 31 not taken.
|
4 | ASSERT_NEAR(i, state_.getCurrentIndex(), 0.0001) << "even"; | |
61 | } | |||
62 | ||||
63 |
1/1✓ Branch 1 taken 1 time.
|
1 | state_.decodeTriggerEvent("test", engine->triggerCentral.triggerShape, /* override */ nullptr, triggerConfiguration, SHAFT_PRIMARY_RISING, r++); | |
64 |
4/9✓ Branch 3 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.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(10, state_.getCurrentIndex()); | |
65 | ||||
66 |
1/1✓ Branch 1 taken 1 time.
|
1 | state_.decodeTriggerEvent("test", engine->triggerCentral.triggerShape, /* override */ nullptr, triggerConfiguration, SHAFT_PRIMARY_RISING, r++); | |
67 |
4/9✓ Branch 3 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.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(0, state_.getCurrentIndex()); // new revolution | |
68 | 1 | } | ||
69 | ||||
70 | 4 | TEST(trigger, test1995FordInline6TriggerDecoder) { | ||
71 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 0, getTriggerZeroEventIndex(engine_type_e::FORD_INLINE_6_1995)) << "triggerIndex "; | |
72 | ||||
73 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::FORD_INLINE_6_1995); | |
74 | 1 | setTable(config->ignitionIatCorrTable, 0); | ||
75 | 1 | engineConfiguration->isFasterEngineSpinUpEnabled = false; | ||
76 | ||||
77 | 1 | engineConfiguration->minimumIgnitionTiming = -15; | ||
78 |
1/1✓ Branch 1 taken 1 time.
|
1 | setWholeTimingTable(-13); | |
79 | ||||
80 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Iat, 49.579071f); | |
81 | ||||
82 | 1 | TriggerWaveform * shape = &engine->triggerCentral.triggerShape; | ||
83 | ||||
84 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 0, shape->getTriggerWaveformSynchPointIndex()) << "triggerShapeSynchPointIndex"; | |
85 | ||||
86 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.applyTriggerWaveform(); | |
87 | ||||
88 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->periodicFastCallback(); | |
89 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireTriggerEvents(48); | |
90 |
4/9✓ Branch 3 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.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(2000, Sensor::getOrZero(SensorType::Rpm)); | |
91 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->periodicFastCallback(); | |
92 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireTriggerEvents(48); | |
93 | ||||
94 | 1 | IgnitionEventList *ecl = &engine->ignitionEvents; | ||
95 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ(true, ecl->isReady) << "ford inline ignition events size"; | |
96 | ||||
97 |
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(ecl->elements[0].dwellAngle, 7, 1e-3); | |
98 |
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(ecl->elements[0].sparkAngle, 13, 1e-3); | |
99 |
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(ecl->elements[5].dwellAngle, 607, 1e-3); | |
100 |
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(ecl->elements[5].sparkAngle, 613.0f, 1e-3); | |
101 | ||||
102 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->ignitionState.updateDwell(2000, false); | |
103 |
4/10✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
|
1 | ASSERT_FLOAT_EQ(0.5, engine->ignitionState.getDwell()) << "running dwell"; | |
104 | } | |||
105 | ||||
106 | 4 | TEST(misc, testGetCoilDutyCycleIssue977) { | ||
107 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
108 |
1/1✓ Branch 1 taken 1 time.
|
1 | setSingleCoilDwell(); | |
109 | 1 | engineConfiguration->ignitionMode = IM_ONE_COIL; | ||
110 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.setTriggerType(trigger_type_e::TT_FORD_ASPIRE); | |
111 | ||||
112 | 1 | float rpm = 2000; | ||
113 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->rpmCalculator.setRpmValue(rpm); | |
114 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->ignitionState.updateDwell(rpm, false); | |
115 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 4, engine->ignitionState.getDwell()) << "running dwell"; | |
116 | ||||
117 |
4/9✓ 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.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
|
1 | ASSERT_NEAR( 26.66666, getCoilDutyCycle(rpm), 0.0001); | |
118 | 1 | } | ||
119 | ||||
120 | 4 | TEST(misc, testFordAspire) { | ||
121 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("*************************************************** testFordAspire\r\n"); | |
122 | ||||
123 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 4, getTriggerZeroEventIndex(engine_type_e::FORD_ASPIRE_1996)) << "getTriggerZeroEventIndex"; | |
124 | ||||
125 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::FORD_ASPIRE_1996); | |
126 | ||||
127 |
5/11✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 time.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 27 not taken.
✗ Branch 30 not taken.
✓ Branch 37 taken 1 time.
✗ Branch 38 not taken.
|
1 | ASSERT_EQ( 4, getTriggerCentral()->triggerShape.getTriggerWaveformSynchPointIndex()) << "getTriggerWaveformSynchPointIndex"; | |
128 | ||||
129 | 1 | engineConfiguration->crankingTimingAngle = 31; | ||
130 | ||||
131 | 1 | int rpm = 2000; | ||
132 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->rpmCalculator.setRpmValue(rpm); | |
133 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->ignitionState.updateDwell(rpm, false); | |
134 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 4, engine->ignitionState.getDwell()) << "running dwell"; | |
135 | ||||
136 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->rpmCalculator.setRpmValue(6000); | |
137 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->ignitionState.updateDwell(6000, false); | |
138 |
4/10✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
|
1 | ASSERT_NEAR(3.25, engine->ignitionState.getDwell(), 0.0001) << "higher rpm dwell"; | |
139 | ||||
140 | } | |||
141 | ||||
142 | extern TriggerDecoderBase initState; | |||
143 | ||||
144 | 13 | static void testTriggerDecoder2(const char *msg, engine_type_e type, int synchPointIndex, float channel1duty, float channel2duty, float expectedGapRatio = NAN) { | ||
145 |
1/1✓ Branch 1 taken 13 times.
|
13 | printf("====================================================================================== testTriggerDecoder2 msg=%s\r\n", msg); | |
146 | ||||
147 | // Some configs use aux valves, which requires this sensor | |||
148 |
1/1✓ Branch 6 taken 13 times.
|
39 | std::unordered_map<SensorType, float> sensorVals = {{SensorType::DriverThrottleIntent, 0}}; | |
149 |
1/1✓ Branch 2 taken 13 times.
|
13 | EngineTestHelper eth(type, sensorVals); | |
150 | ||||
151 | 13 | TriggerWaveform *t = &engine->triggerCentral.triggerShape; | ||
152 | ||||
153 |
2/9✗ Branch 5 not taken.
✓ Branch 6 taken 13 times.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 33 taken 13 times.
✗ Branch 34 not taken.
|
13 | ASSERT_FALSE(t->shapeDefinitionError) << "isError"; | |
154 | ||||
155 |
4/11✓ Branch 3 taken 13 times.
✓ Branch 6 taken 13 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 13 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 35 taken 13 times.
✗ Branch 36 not taken.
|
13 | ASSERT_EQ(synchPointIndex, t->getTriggerWaveformSynchPointIndex()) << "synchPointIndex " << msg; | |
156 |
2/2✓ Branch 1 taken 1 time.
✓ Branch 2 taken 12 times.
|
2/2✓ Decision 'true' taken 1 time.
✓ Decision 'false' taken 12 times.
|
13 | if (!std::isnan(expectedGapRatio)) { |
157 |
3/9✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
|
1 | ASSERT_NEAR(expectedGapRatio, initState.triggerSyncGapRatio, 0.001) << "actual gap ratio"; | |
158 | } | |||
159 | 13 | } | ||
160 | ||||
161 | //same as testTriggerDecoder2 but using trigger type not engine type | |||
162 | 2 | static void testTriggerDecoderByTriggerType(const char *msg, trigger_type_e type, int synchPointIndex, float channel1duty, float channel2duty, float expectedGapRatio = NAN) { | ||
163 |
1/1✓ Branch 1 taken 2 times.
|
2 | printf("====================================================================================== testTriggerDecoderByTriggerName msg=%s\r\n", msg); | |
164 | ||||
165 | // Some configs use aux valves, which requires this sensor | |||
166 |
1/1✓ Branch 6 taken 2 times.
|
6 | std::unordered_map<SensorType, float> sensorVals = {{SensorType::DriverThrottleIntent, 0}}; | |
167 |
1/1✓ Branch 2 taken 2 times.
|
2 | EngineTestHelper eth(engine_type_e::TEST_ENGINE, sensorVals); | |
168 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.setTriggerType(type); | |
169 | ||||
170 | 2 | TriggerWaveform *t = &engine->triggerCentral.triggerShape; | ||
171 | ||||
172 |
2/9✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 33 taken 2 times.
✗ Branch 34 not taken.
|
2 | ASSERT_FALSE(t->shapeDefinitionError) << "isError"; | |
173 | ||||
174 |
4/11✓ Branch 3 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 35 taken 2 times.
✗ Branch 36 not taken.
|
2 | ASSERT_EQ(synchPointIndex, t->getTriggerWaveformSynchPointIndex()) << "synchPointIndex " << msg; | |
175 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
|
1/2✗ Decision 'true' not taken.
✓ Decision 'false' taken 2 times.
|
2 | if (!std::isnan(expectedGapRatio)) { |
176 | ✗ | ASSERT_NEAR(expectedGapRatio, initState.triggerSyncGapRatio, 0.001) << "actual gap ratio"; | ||
177 | } | |||
178 | 2 | } | ||
179 | ||||
180 | 2 | static void assertActionCallbacksEqual(const char *msg, action_s const& expected_action, action_s const& actual_action) { | ||
181 |
3/9✓ Branch 6 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 2 times.
✗ Branch 34 not taken.
|
2 | ASSERT_EQ(expected_action.getCallback(), actual_action.getCallback()) << msg; | |
182 | } | |||
183 | ||||
184 | extern bool debugSignalExecutor; | |||
185 | ||||
186 | 1 | void configureTestDefaultLambdas() { | ||
187 | 1 | constexpr size_t TEST_LAMBDA_TABLE_COLUMN_COUNT = efi::size(engine_configuration_defaults::DEFAULT_LAMBDA_TABLE_ROW); | ||
188 | static_assert(TEST_LAMBDA_TABLE_COLUMN_COUNT == efi::size(engine_configuration_defaults::DEFAULT_LAMBDA_LOAD_BINS)); | |||
189 | static_assert(TEST_LAMBDA_TABLE_COLUMN_COUNT <= FUEL_LOAD_COUNT); | |||
190 | 1 | copyArray(config->lambdaLoadBins, engine_configuration_defaults::DEFAULT_LAMBDA_LOAD_BINS); | ||
191 | ||||
192 | // Set each row to the corresponding value from rowValues | |||
193 |
2/2✓ Branch 1 taken 16 times.
✓ Branch 2 taken 1 time.
|
2/2✓ Decision 'true' taken 16 times.
✓ Decision 'false' taken 1 time.
|
17 | for (size_t i = 0; i < efi::size(config->lambdaTable); i++) { |
194 |
2/2✓ Branch 2 taken 256 times.
✓ Branch 3 taken 16 times.
|
2/2✓ Decision 'true' taken 256 times.
✓ Decision 'false' taken 16 times.
|
272 | for (size_t j = 0; j < efi::size(config->lambdaTable[i]); j++) { |
195 | 256 | config->lambdaTable[i][j] = engine_configuration_defaults::DEFAULT_LAMBDA_TABLE_ROW[i]; | ||
196 | } | |||
197 | } | |||
198 | 1 | } | ||
199 | ||||
200 | 4 | TEST(misc, testRpmCalculator) { | ||
201 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::FORD_INLINE_6_1995); | |
202 |
1/3✗ Branch 0 not taken.
✓ Branch 1 taken 1 time.
✗ Branch 3 not taken.
|
1 | efiAssertVoid(ObdCode::CUSTOM_ERR_6670, engineConfiguration!=NULL, "null config in engine"); | |
203 | ||||
204 |
1/1✓ Branch 1 taken 1 time.
|
1 | configureTestDefaultLambdas(); | |
205 | 1 | setTable(config->injectionPhase, -180.0f); | ||
206 | ||||
207 | 1 | engine->tdcMarkEnabled = false; | ||
208 | ||||
209 | // These tests were written when the default target AFR was 14.0, so replicate that | |||
210 | 1 | engineConfiguration->stoichRatioPrimary = 14; | ||
211 | ||||
212 |
5/5✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 13 taken 1 time.
✓ Branch 17 taken 1 time.
|
3 | EXPECT_CALL(*eth.mockAirmass, getAirmass(_, _)) | |
213 |
3/3✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
|
3 | .WillRepeatedly(Return(AirmassResult{0.3024f, 50.0f})); | |
214 | ||||
215 | 1 | IgnitionEventList *ilist = &engine->ignitionEvents; | ||
216 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 0, ilist->isReady) << "size #1"; | |
217 | ||||
218 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 720, engine->engineState.engineCycle) << "engineCycle"; | |
219 | ||||
220 | 1 | engineConfiguration->minimumIgnitionTiming = -15; | ||
221 | 1 | float timingAdvance = -13; | ||
222 |
1/1✓ Branch 1 taken 1 time.
|
1 | setWholeTimingTable(timingAdvance); | |
223 | ||||
224 | 1 | engineConfiguration->trigger.customTotalToothCount = 8; | ||
225 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.applyTriggerWaveform(); | |
226 | ||||
227 |
1/1✓ Branch 1 taken 1 time.
|
1 | setFlatInjectorLag(0); | |
228 | ||||
229 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->updateSlowSensors(); | |
230 | ||||
231 |
4/9✓ Branch 3 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.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(0, round(Sensor::getOrZero(SensorType::Rpm))); | |
232 | ||||
233 | // triggerIndexByAngle update is now fixed! prepareOutputSignals() wasn't reliably called | |||
234 |
4/9✓ Branch 3 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.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(4, engine->triggerCentral.triggerShape.findAngleIndex(&engine->triggerCentral.triggerFormDetails, 240)); | |
235 |
4/9✓ Branch 3 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.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(4, engine->triggerCentral.triggerShape.findAngleIndex(&engine->triggerCentral.triggerFormDetails, 241)); | |
236 | ||||
237 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireTriggerEvents(/* count */ 48); | |
238 | ||||
239 |
4/9✓ Branch 3 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.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(1500, Sensor::getOrZero(SensorType::Rpm)); | |
240 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 14, engine->triggerCentral.triggerState.getCurrentIndex()) << "index #1"; | |
241 | ||||
242 | ||||
243 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
244 | ||||
245 | // debugSignalExecutor = true; | |||
246 | ||||
247 |
4/9✓ 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.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(engine->triggerCentral.triggerState.getShaftSynchronized(), 1); | |
248 | ||||
249 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardMs(5 /*ms*/); | |
250 | ||||
251 |
1/1✓ Branch 2 taken 1 time.
|
1 | int start = getTimeNowUs(); | |
252 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 485000, start) << "start value"; | |
253 | ||||
254 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->periodicFastCallback(); | |
255 | ||||
256 |
3/8✓ 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.
✓ Branch 24 taken 1 time.
✗ Branch 25 not taken.
|
1 | ASSERT_NEAR(engine->engineState.timingAdvance[0], 720 + timingAdvance, 0.1f); | |
257 | ||||
258 |
3/9✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
|
1 | ASSERT_NEAR(4.5450, engine->engineState.injectionDuration, EPS4D) << "fuel #1"; | |
259 | 1 | InjectionEvent *ie0 = &engine->injectionEvents.elements[0]; | ||
260 |
3/9✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
|
1 | ASSERT_NEAR(499.095, ie0->injectionStartAngle, EPS4D) << "injection angle"; | |
261 | ||||
262 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.firePrimaryTriggerRise(); | |
263 |
4/9✓ Branch 3 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.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(1500, Sensor::getOrZero(SensorType::Rpm)); | |
264 | ||||
265 |
4/10✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
|
1 | ASSERT_NEAR(eth.timeToAngle(FORD_INLINE_DWELL), engine->ignitionState.dwellDurationAngle, EPS4D) << "dwell"; | |
266 |
3/9✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
|
1 | ASSERT_NEAR(4.5450, engine->engineState.injectionDuration, EPS4D) << "fuel #2"; | |
267 |
3/9✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
|
1 | ASSERT_NEAR(111.1111, engine->rpmCalculator.oneDegreeUs, EPS4D) << "one degree"; | |
268 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 1, ilist->isReady) << "size #2"; | |
269 |
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(ilist->elements[0].dwellAngle, 8.5f, 1e-3); | |
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(ilist->elements[0].sparkAngle, 13.0f, 1e-3); | |
271 | ||||
272 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 0, engine->triggerCentral.triggerState.getCurrentIndex()) << "index #2"; | |
273 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 4, engine->scheduler.size()) << "queue size/2"; | |
274 | { | |||
275 |
1/1✓ Branch 1 taken 1 time.
|
1 | auto const ev0{ engine->scheduler.getForUnitTest(0) }; | |
276 | 1 | auto const turnSparkPinHighStartChargingAction{ action_s::make<turnSparkPinHighStartCharging>((IgnitionEvent*){}) }; | ||
277 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertActionCallbacksEqual("Call@0", ev0->action, turnSparkPinHighStartChargingAction); | |
278 |
3/9✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
|
1 | ASSERT_EQ(start + 944, ev0->getMomentUs()) << "ev 0"; | |
279 |
2/7✓ Branch 4 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_EQ(&enginePins.coils[0], ev0->action.getArgument<IgnitionEvent*>()->outputs[0]) << "coil 0"; | |
280 | ||||
281 |
1/1✓ Branch 1 taken 1 time.
|
1 | auto const ev1{ engine->scheduler.getForUnitTest(1) }; | |
282 | 1 | auto const fireSparkAndPrepareNextScheduleAction{ action_s::make<fireSparkAndPrepareNextSchedule>((IgnitionEvent*){}) }; | ||
283 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertActionCallbacksEqual("Call@1", ev1->action, fireSparkAndPrepareNextScheduleAction); | |
284 |
3/9✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
|
1 | ASSERT_EQ(start + 944 + 1000 * FORD_INLINE_DWELL, ev1->getMomentUs()) << "ev 1"; | |
285 |
2/7✓ Branch 4 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_EQ(&enginePins.coils[0], ev1->action.getArgument<IgnitionEvent*>()->outputs[0]) << "coil 1"; | |
286 | } | |||
287 | ||||
288 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->scheduler.clear(); | |
289 | ||||
290 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(5); | |
291 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(5); | |
292 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(5); | |
293 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 2, engine->triggerCentral.triggerState.getCurrentIndex()) << "index #3"; | |
294 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 4, engine->scheduler.size()) << "queue size 3"; | |
295 | ||||
296 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 35 taken 1 time.
✗ Branch 36 not taken.
|
1 | ASSERT_EQ(start + 13333 - 1515 + 2459, engine->scheduler.getForUnitTest(0)->getMomentUs()) << "ev 3"; | |
297 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 35 taken 1 time.
✗ Branch 36 not taken.
|
1 | ASSERT_EQ(start + 14277 + 500, engine->scheduler.getForUnitTest(1)->getMomentUs()) << "ev 5"; | |
298 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 35 taken 1 time.
✗ Branch 36 not taken.
|
1 | ASSERT_EQ(start + 14777 + 677, engine->scheduler.getForUnitTest(2)->getMomentUs()) << "3/3"; | |
299 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->scheduler.clear(); | |
300 | ||||
301 |
4/9✓ Branch 3 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.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(4, engine->triggerCentral.triggerShape.findAngleIndex(&engine->triggerCentral.triggerFormDetails, 240)); | |
302 |
4/9✓ Branch 3 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.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(4, engine->triggerCentral.triggerShape.findAngleIndex(&engine->triggerCentral.triggerFormDetails, 241)); | |
303 | ||||
304 | ||||
305 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(5); | |
306 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 0, engine->scheduler.size()) << "queue size 4.1"; | |
307 | ||||
308 | ||||
309 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(5); | |
310 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 4, engine->scheduler.size()) << "queue size 4.2"; | |
311 | ||||
312 | ||||
313 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(5); | |
314 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 4, engine->scheduler.size()) << "queue size 4.3"; | |
315 | ||||
316 |
4/10✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
|
1 | ASSERT_NEAR(eth.timeToAngle(FORD_INLINE_DWELL), engine->ignitionState.dwellDurationAngle, EPS4D) << "dwell"; | |
317 |
3/9✓ Branch 2 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
|
1 | ASSERT_NEAR(4.5450, engine->engineState.injectionDuration, EPS4D) << "fuel #3"; | |
318 |
4/9✓ Branch 3 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.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(1500, Sensor::getOrZero(SensorType::Rpm)); | |
319 | ||||
320 | ||||
321 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 6, engine->triggerCentral.triggerState.getCurrentIndex()) << "index #4"; | |
322 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 4, engine->scheduler.size()) << "queue size 4"; | |
323 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->scheduler.clear(); | |
324 | ||||
325 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(5); | |
326 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 0, engine->scheduler.size()) << "queue size 5"; | |
327 | // todo: assert queue elements | |||
328 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->scheduler.clear(); | |
329 | ||||
330 | ||||
331 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(5); | |
332 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 4, engine->scheduler.size()) << "queue size 6"; | |
333 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 35 taken 1 time.
✗ Branch 36 not taken.
|
1 | ASSERT_EQ(start + 40944, engine->scheduler.getForUnitTest(0)->getMomentUs()) << "6/0"; | |
334 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 35 taken 1 time.
✗ Branch 36 not taken.
|
1 | ASSERT_EQ(start + 41444, engine->scheduler.getForUnitTest(1)->getMomentUs()) << "6/1"; | |
335 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->scheduler.clear(); | |
336 | ||||
337 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(5); | |
338 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 0, engine->scheduler.size()) << "queue size 7"; | |
339 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->scheduler.clear(); | |
340 | ||||
341 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(5 /*ms*/); | |
342 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(5); | |
343 | ||||
344 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 4, engine->scheduler.size()) << "queue size 8"; | |
345 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 35 taken 1 time.
✗ Branch 36 not taken.
|
1 | ASSERT_EQ(start + 53333 - 1515 + 2459, engine->scheduler.getForUnitTest(0)->getMomentUs()) << "8/0"; | |
346 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 35 taken 1 time.
✗ Branch 36 not taken.
|
1 | ASSERT_EQ(start + 54277 + 2459 - 1959, engine->scheduler.getForUnitTest(1)->getMomentUs()) << "8/1"; | |
347 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->scheduler.clear(); | |
348 | 1 | } | ||
349 | ||||
350 | 4 | TEST(trigger, testAnotherTriggerDecoder) { | ||
351 | 1 | testTriggerDecoder2("Miata 2003", engine_type_e::MAZDA_MIATA_NB2, 3, 0.38888889, 0.0); | ||
352 | 1 | } | ||
353 | ||||
354 | 4 | TEST(trigger, testTriggerDecoder) { | ||
355 | 1 | printf("====================================================================================== testTriggerDecoder\r\n"); | ||
356 | ||||
357 | { | |||
358 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
359 | 1 | TriggerWaveform * s = &engine->triggerCentral.triggerShape; | ||
360 | ||||
361 |
1/1✓ Branch 1 taken 1 time.
|
1 | initializeSkippedToothTrigger(s, 2, 0, FOUR_STROKE_CAM_SENSOR, SyncEdge::Rise); | |
362 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ(4u, s->getSize()) << "shape size"; | |
363 |
3/8✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ(s->wave.getSwitchTime(0), 0.25); | |
364 |
3/8✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ(s->wave.getSwitchTime(1), 0.5); | |
365 |
3/8✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ(s->wave.getSwitchTime(2), 0.75); | |
366 |
3/8✓ Branch 5 taken 1 time.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ(s->wave.getSwitchTime(3), 1); | |
367 | 1 | } | ||
368 | ||||
369 | 1 | printf("====================================================================================== testTriggerDecoder part 2\r\n"); | ||
370 | 1 | testTriggerDecoder2("Dodge Neon 1995", engine_type_e::DODGE_NEON_1995, 0, 0.4931, 0.2070); | ||
371 | ||||
372 | 1 | testTriggerDecoder2("ford aspire", engine_type_e::FORD_ASPIRE_1996, 4, 0.0000, 0.5); | ||
373 | ||||
374 | 1 | testTriggerDecoder2("dodge ram", engine_type_e::DODGE_RAM, 16, 0.5000, 0.06); | ||
375 | ||||
376 | 1 | testTriggerDecoder2("Miata NB2", engine_type_e::MAZDA_MIATA_NB2, 3, 0.3888888955, 0); | ||
377 | ||||
378 | 1 | printf("====================================================================================== testTriggerDecoder part 3\r\n"); | ||
379 | ||||
380 | 1 | testTriggerDecoder2("test 2/1 both", engine_type_e::TEST_ISSUE_366_BOTH, 0, 0.2500, 0.0); | ||
381 | 1 | testTriggerDecoder2("test 2/1 rise", engine_type_e::TEST_ISSUE_366_RISE, 0, 0.0000, 0.0); | ||
382 | ||||
383 | 1 | testTriggerDecoder2("test engine", engine_type_e::TEST_ENGINE, 0, 0.7500, 0.2500); | ||
384 | 1 | testTriggerDecoder2("testGY6_139QMB", engine_type_e::GY6_139QMB, 0, 0.4375, 0.0); | ||
385 | ||||
386 | 1 | testTriggerDecoderByTriggerType("testFordEscortGt", trigger_type_e::TT_MAZDA_DOHC_1_4, 0, 0.8096, 0.3844); | ||
387 | ||||
388 | 1 | testTriggerDecoderByTriggerType("NISSAN_PRIMERA", trigger_type_e::TT_NISSAN_SR20VE, 2, 0.9611, 0.0); | ||
389 | ||||
390 | 1 | testTriggerDecoder2("test1+1", engine_type_e::DEFAULT_FRANKENSO, 0, 0.7500, 0.2500); | ||
391 | ||||
392 | 1 | testTriggerDecoder2("neon NGC4", engine_type_e::DODGE_NEON_2003_CRANK, 6, 0.5000, 0.0, CHRYSLER_NGC4_GAP); | ||
393 | ||||
394 | { | |||
395 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::DODGE_NEON_2003_CRANK); | |
396 | ||||
397 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("!!!!!!!!!!!!!!!!!! Now trying with only rising edges !!!!!!!!!!!!!!!!!\r\n"); | |
398 | ||||
399 |
1/1✓ Branch 1 taken 1 time.
|
1 | applyNonPersistentConfiguration(); | |
400 |
1/1✓ Branch 1 taken 1 time.
|
1 | prepareOutputSignals(); | |
401 | ||||
402 | 1 | } | ||
403 | ||||
404 | 1 | testTriggerDecoder2("sachs", engine_type_e::SACHS, 0, 0.4800, 0.000); | ||
405 | ||||
406 | 1 | testTriggerDecoder2("vw ABA", engine_type_e::VW_ABA, 0, 0.51666, 0.0); | ||
407 | } | |||
408 | ||||
409 | 54 | static void assertInjectionEventBase(const char *msg, InjectionEvent *ev, int injectorIndex, int eventIndex, angle_t angleOffset) { | ||
410 |
2/8✓ Branch 2 taken 54 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 54 times.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
|
54 | EXPECT_EQ(injectorIndex, ev->outputs[0]->injectorIndex) << msg << "inj index"; | |
411 |
2/8✓ Branch 2 taken 54 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 54 times.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
|
54 | EXPECT_NEAR_M4(angleOffset, ev->injectionStartAngle) << msg << "inj index"; | |
412 | 54 | } | ||
413 | ||||
414 | 8 | static void assertInjectionEvent(const char *msg, InjectionEvent *ev, int injectorIndex, int eventIndex, angle_t angleOffset) { | ||
415 | 8 | assertInjectionEventBase(msg, ev, injectorIndex, eventIndex, angleOffset); | ||
416 | ||||
417 | // There should NOT be a second injector configured | |||
418 |
2/6✓ Branch 2 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8 times.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
|
8 | EXPECT_EQ(nullptr, ev->outputs[1]); | |
419 | 8 | } | ||
420 | ||||
421 | 46 | static void assertInjectionEventBatch(const char *msg, InjectionEvent *ev, int injectorIndex, int secondInjectorIndex, int eventIndex, angle_t angleOffset) { | ||
422 | 46 | assertInjectionEventBase(msg, ev, injectorIndex, eventIndex, angleOffset); | ||
423 | ||||
424 | // There should be a second injector - confirm it's the correct one | |||
425 |
3/8✓ Branch 3 taken 46 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 46 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 46 times.
✗ Branch 27 not taken.
|
46 | ASSERT_NE(nullptr, ev->outputs[1]); | |
426 |
2/6✓ Branch 2 taken 46 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 46 times.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
|
46 | EXPECT_EQ(secondInjectorIndex, ev->outputs[1]->injectorIndex); | |
427 | } | |||
428 | ||||
429 | // https://sourceforge.net/p/rusefi/tickets/299/ | |||
430 | 3 | static void setTestBug299(EngineTestHelper *eth) { | ||
431 | 3 | setupSimpleTestEngineWithMafAndTT_ONE_trigger(eth); | ||
432 |
5/5✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✓ Branch 10 taken 3 times.
✓ Branch 13 taken 3 times.
✓ Branch 17 taken 3 times.
|
9 | EXPECT_CALL(*eth->mockAirmass, getAirmass(_, _)) | |
433 |
3/3✓ Branch 5 taken 3 times.
✓ Branch 8 taken 3 times.
✓ Branch 11 taken 3 times.
|
9 | .WillRepeatedly(Return(AirmassResult{0.1008001f, 50.0f})); | |
434 | ||||
435 | 3 | Engine *engine = ð->engine; | ||
436 | ||||
437 | ||||
438 |
4/9✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 3 times.
✗ Branch 32 not taken.
|
3 | ASSERT_EQ(0, Sensor::getOrZero(SensorType::Rpm)); | |
439 | ||||
440 | 3 | eth->fireTriggerEventsWithDuration(20); | ||
441 | // still no RPM since need to cycles measure cycle duration | |||
442 |
4/9✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 3 times.
✗ Branch 32 not taken.
|
3 | ASSERT_EQ(0, Sensor::getOrZero(SensorType::Rpm)); | |
443 | 3 | eth->fireTriggerEventsWithDuration(20); | ||
444 |
4/9✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 31 taken 3 times.
✗ Branch 32 not taken.
|
3 | ASSERT_EQ(3000, Sensor::getOrZero(SensorType::Rpm)); | |
445 | ||||
446 | 3 | eth->clearQueue(); | ||
447 | ||||
448 | /** | |||
449 | * Trigger up - scheduling fuel for full engine cycle | |||
450 | */ | |||
451 | 3 | eth->fireRise(20); | ||
452 | // fuel schedule - short pulses. | |||
453 | // time...|0.......|10......|20......|30......|40 | |||
454 | // inj #0 |.......#|........|.......#|........| | |||
455 | // inj #1 |........|.......#|........|.......#| | |||
456 |
4/10✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 3 times.
✗ Branch 35 not taken.
|
3 | ASSERT_EQ( 4, engine->scheduler.size()) << "qs#00"; | |
457 |
4/10✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 3 times.
✗ Branch 35 not taken.
|
3 | ASSERT_EQ( 3u, getRevolutionCounter()) << "rev cnt#3"; | |
458 | 3 | eth->assertInjectorUpEvent("setTestBug299: 1@0", 0, MS2US(8.5), 2); | ||
459 | 3 | eth->assertInjectorDownEvent("@1", 1, MS2US(10), 2); | ||
460 | 3 | eth->assertInjectorUpEvent("1@2", 2, MS2US(18.5), 3); | ||
461 | 3 | eth->assertInjectorDownEvent("1@3", 3, MS2US(20), 3); | ||
462 |
4/10✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 3 times.
✗ Branch 35 not taken.
|
3 | ASSERT_EQ( 0, eth->executeActions()) << "exec#0"; | |
463 | ||||
464 | 3 | FuelSchedule * t = &engine->injectionEvents; | ||
465 | ||||
466 | 3 | assertInjectionEventBatch("#0", &t->elements[0], 0, 3, 1, 153 + 360); | ||
467 | 3 | assertInjectionEventBatch("#1_i_@", &t->elements[1], 2, 1, 1, 333 + 360); | ||
468 | 3 | assertInjectionEventBatch("#2@", &t->elements[2], 3, 0, 0, 153); | ||
469 | 3 | assertInjectionEventBatch("inj#3@", &t->elements[3], 1, 2, 0, 153 + 180); | ||
470 | ||||
471 | /** | |||
472 | * Trigger down - no new events, executing some | |||
473 | */ | |||
474 | 3 | eth->fireFall(20); | ||
475 | // same exact picture | |||
476 | // time...|-20.....|-10.....|0.......|10......|20 | |||
477 | // inj #0 |.......#|........|.......#|........| | |||
478 | // inj #1 |........|.......#|........|.......#| | |||
479 |
4/10✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 3 times.
✗ Branch 35 not taken.
|
3 | ASSERT_EQ( 8, engine->scheduler.size()) << "qs#0"; | |
480 |
4/10✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 3 times.
✗ Branch 35 not taken.
|
3 | ASSERT_EQ( 3u, getRevolutionCounter()) << "rev cnt#3"; | |
481 | 3 | eth->assertInjectorUpEvent("02@0", 0, MS2US(-11.5), 2); | ||
482 | 3 | eth->assertInjectorDownEvent("@1", 1, MS2US(-10), 2); | ||
483 | 3 | eth->assertInjectorUpEvent("@2", 2, MS2US(-1.5), 3); | ||
484 | 3 | eth->assertInjectorDownEvent("02@3", 3, MS2US(0), 3); | ||
485 | 3 | eth->assertInjectorUpEvent("02@4", 4, MS2US(8.5), 0); | ||
486 | 3 | eth->assertInjectorDownEvent("@5", 5, MS2US(10), 0); | ||
487 | 3 | eth->assertInjectorUpEvent("02@6", 6, MS2US(18.5), 1); | ||
488 | 3 | eth->assertInjectorDownEvent("@7", 7, MS2US(20), 1); | ||
489 |
4/10✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 3 times.
✗ Branch 35 not taken.
|
3 | ASSERT_EQ( 4, eth->executeActions()) << "exec#1"; | |
490 | ||||
491 | ||||
492 | /** | |||
493 | * Trigger up again | |||
494 | */ | |||
495 | 3 | eth->moveTimeForwardMs(20 /*ms*/); | ||
496 | 3 | eth->assertInjectorUpEvent("22@0", 0, MS2US(-11.5), 0); | ||
497 | 3 | eth->assertInjectorDownEvent("22@1", 1, MS2US(-10), 0); | ||
498 | 3 | eth->assertInjectorUpEvent("22@2", 2, MS2US(-1.5), 1); | ||
499 | 3 | eth->assertInjectorDownEvent("22@3", 3, MS2US(0), 1); | ||
500 |
4/10✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 3 times.
✗ Branch 35 not taken.
|
3 | ASSERT_EQ( 4, eth->executeActions()) << "exec#20"; | |
501 | ||||
502 | 3 | eth->firePrimaryTriggerRise(); | ||
503 |
4/10✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 3 times.
✗ Branch 35 not taken.
|
3 | ASSERT_EQ( 4, engine->scheduler.size()) << "qs#0-2"; | |
504 | // fuel schedule - short pulses. and more realistic schedule this time | |||
505 | // time...|-20.....|-10.....|0.......|10......|20 | |||
506 | // inj #0 |.......#|........|.......#|........| | |||
507 | // inj #1 |........|.......#|........|.......#| | |||
508 | 3 | eth->assertInjectorUpEvent("2@0", 0, MS2US(8.5), 2); | ||
509 | 3 | eth->assertInjectorDownEvent("@1", 1, MS2US(10), 2); | ||
510 | 3 | eth->assertInjectorUpEvent("@2", 2, MS2US(18.5), 3); | ||
511 | 3 | eth->assertInjectorDownEvent("2@3", 3, MS2US(20), 3); | ||
512 |
4/10✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 3 times.
✗ Branch 35 not taken.
|
3 | ASSERT_EQ( 0, eth->executeActions()) << "exec#2"; | |
513 | ||||
514 | ||||
515 | 3 | eth->moveTimeForwardUs(MS2US(20)); | ||
516 | 3 | eth->executeActions(); | ||
517 | 3 | eth->firePrimaryTriggerFall(); | ||
518 | // fuel schedule - short pulses. and more realistic schedule this time | |||
519 | // time...|-20.....|-10.....|0.......|10......|20 | |||
520 | // inj #0 |.......#|........|........|........| | |||
521 | // inj #1 |........|.......#|........|........| | |||
522 |
4/10✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 3 times.
✗ Branch 35 not taken.
|
3 | ASSERT_EQ( 4, engine->scheduler.size()) << "qs#0-2"; | |
523 |
4/10✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 3 times.
✗ Branch 35 not taken.
|
3 | ASSERT_EQ( 4u, getRevolutionCounter()) << "rev cnt#4"; | |
524 | 3 | eth->assertInjectorUpEvent("0@0", 0, MS2US(8.5), 0); | ||
525 | 3 | eth->assertInjectorDownEvent("0@1", 1, MS2US(10), 0); | ||
526 | 3 | eth->assertInjectorUpEvent("0@2", 2, MS2US(18.5), 1); | ||
527 | 3 | eth->assertInjectorDownEvent("0@3", 3, MS2US(20), 1); | ||
528 |
4/10✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 3 times.
✗ Branch 35 not taken.
|
3 | ASSERT_EQ( 0, eth->executeActions()) << "exec#3"; | |
529 | ||||
530 | ||||
531 |
3/9✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 3 times.
✗ Branch 30 not taken.
|
3 | ASSERT_EQ( 1, engine->fuelComputer.running.intakeTemperatureCoefficient) << "iatC"; | |
532 |
3/9✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 3 times.
✗ Branch 30 not taken.
|
3 | ASSERT_EQ( 1, engine->fuelComputer.running.coolantTemperatureCoefficient) << "cltC"; | |
533 |
5/11✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✓ Branch 11 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 3 times.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✗ Branch 28 not taken.
✗ Branch 31 not taken.
✓ Branch 38 taken 3 times.
✗ Branch 39 not taken.
|
3 | ASSERT_EQ( 0, engine->module<InjectorModelPrimary>()->getDeadtime()) << "lag"; | |
534 | ||||
535 |
4/10✓ Branch 3 taken 3 times.
✓ Branch 7 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 3 times.
✗ Branch 35 not taken.
|
3 | ASSERT_EQ( 3000, round(Sensor::getOrZero(SensorType::Rpm))) << "setTestBug299: RPM"; | |
536 | ||||
537 |
3/9✓ Branch 2 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 27 taken 3 times.
✗ Branch 28 not taken.
|
3 | ASSERT_NEAR(1.5, engine->engineState.injectionDuration, EPS4D) << "fuel #1"; | |
538 |
5/11✓ Branch 2 taken 3 times.
✓ Branch 5 taken 3 times.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 3 times.
✗ Branch 34 not taken.
|
0/1? Decision couldn't be analyzed.
|
3 | ASSERT_NEAR(7.5, getInjectorDutyCycle(round(Sensor::getOrZero(SensorType::Rpm))), EPS4D) << "duty for maf=0"; |
539 | } | |||
540 | ||||
541 | #define assertInjectors(msg, value0, value1) \ | |||
542 | { \ | |||
543 | EXPECT_EQ(value0, enginePins.injectors[0].currentLogicValue) << msg; \ | |||
544 | EXPECT_EQ(value1, enginePins.injectors[1].currentLogicValue) << msg; \ | |||
545 | } | |||
546 | ||||
547 | ✗ | static void setArray(float* p, size_t count, float value) { | ||
548 | ✗ | while (count--) { | ||
549 | ✗ | *p++ = value; | ||
550 | } | |||
551 | ✗ | } | ||
552 | ||||
553 | 2 | void doTestFuelSchedulerBug299smallAndMedium(int startUpDelayMs) { | ||
554 |
1/1✓ Branch 1 taken 2 times.
|
2 | printf("*************************************************** testFuelSchedulerBug299 small to medium\r\n"); | |
555 | ||||
556 |
1/1✓ Branch 2 taken 2 times.
|
2 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
557 | extern bool unitTestBusyWaitHack; | |||
558 | 2 | unitTestBusyWaitHack = true; | ||
559 | 2 | setTable(config->injectionPhase, -180.0f); | ||
560 | 2 | engineConfiguration->isFasterEngineSpinUpEnabled = false; | ||
561 | 2 | engine->tdcMarkEnabled = false; | ||
562 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.moveTimeForwardMs(startUpDelayMs); // nice to know that same test works the same with different anount of idle time on start | |
563 |
1/1✓ Branch 1 taken 2 times.
|
2 | setTestBug299(ð); | |
564 | ||||
565 | FuelSchedule * t; | |||
566 | ||||
567 |
4/14✓ Branch 3 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 32 taken 2 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 43 not taken.
✗ Branch 48 not taken.
✗ Branch 51 not taken.
|
4 | assertInjectors("#0_inj", 0, 0); | |
568 | ||||
569 |
1/1✓ Branch 1 taken 2 times.
|
2 | engine->periodicFastCallback(); | |
570 | ||||
571 | 2 | engine->engineState.injectionDuration = 12.5f; | ||
572 | // Injection duration of 12.5ms | |||
573 |
1/1✓ Branch 2 taken 2 times.
|
2 | MockInjectorModel2 im; | |
574 |
7/7✓ Branch 3 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 10 taken 2 times.
✓ Branch 14 taken 2 times.
✓ Branch 19 taken 2 times.
✓ Branch 22 taken 2 times.
✓ Branch 25 taken 2 times.
|
2 | EXPECT_CALL(im, getInjectionDuration(_)).WillRepeatedly(Return(12.5f)); | |
575 |
1/1✓ Branch 1 taken 2 times.
|
2 | engine->module<InjectorModelPrimary>().set(&im); | |
576 | ||||
577 |
5/11✓ Branch 2 taken 2 times.
✓ Branch 5 taken 2 times.
✓ Branch 8 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 2 times.
✗ Branch 34 not taken.
|
0/1? Decision couldn't be analyzed.
|
2 | ASSERT_NEAR(62.5, getInjectorDutyCycle(round(Sensor::getOrZero(SensorType::Rpm))), EPS4D) << "duty for maf=3"; |
578 | ||||
579 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 4, engine->scheduler.size()) << "qs#1"; | |
580 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.moveTimeForwardUs(MS2US(20)); | |
581 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 4, eth.executeActions()) << "exec#2#0"; | |
582 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 0, engine->scheduler.size()) << "qs#1#2"; | |
583 | ||||
584 | ||||
585 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 4u, getRevolutionCounter()) << "rev cnt#4#0"; | |
586 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.firePrimaryTriggerRise(); | |
587 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 5u, getRevolutionCounter()) << "rev cnt#4#1"; | |
588 | // time...|0.......|10......|20......|30......|40......|50......|60......| | |||
589 | // inj #0 |########|##...###|########|.....###|########|........|........| | |||
590 | // inj #1 |.....###|########|....####|########|........|........|........| | |||
591 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 6, engine->scheduler.size()) << "qs#4"; | |
592 | //todo assertInjectorUpEvent("04@0", 0, MS2US(0), 0); | |||
593 | // assertInjectorUpEvent("04@1", 1, MS2US(7.5), 1); | |||
594 | // assertInjectorDownEvent("04@2", 2, MS2US(12.5), 0); | |||
595 | // assertInjectorUpEvent("04@3", 3, MS2US(17.5), 0); | |||
596 | // assertInjectorDownEvent("04@4", 4, MS2US(20), 1); | |||
597 | // assertInjectorDownEvent("04@5", 5, MS2US(30), 0); | |||
598 | // assertInjectorDownEvent("04@6", 6, MS2US(30), 0); | |||
599 | // assertInjectorUpEvent("04@7", 7, MS2US(37.5), 0); | |||
600 | // assertInjectorDownEvent("04@8", 8, MS2US(40.0), 1); | |||
601 | // assertInjectorDownEvent("04@9", 9, MS2US(50.0), 0); | |||
602 | ||||
603 | // { | |||
604 | // scheduling_s *ev = engine->scheduler.getForUnitTest(9); | |||
605 | // ASSERT_EQ( 5, getRevolutionCounter()) << "rev cnt#4#2"; | |||
606 | // ASSERT_TRUE(ev == &engineConfiguration->fuelActuators[2].signalPair[1].signalTimerDown) << "down 50"; | |||
607 | // } | |||
608 | ||||
609 | ||||
610 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 0, eth.executeActions()) << "exec#4"; | |
611 | ||||
612 | ||||
613 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.fireFall(20); | |
614 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 8, engine->scheduler.size()) << "qs#2#1"; | |
615 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 5u, getRevolutionCounter()) << "rev cnt#5"; | |
616 | // using old fuel schedule - but already wider pulses | |||
617 | // time...|-20.....|-10.....|0.......|10......|20......|30......|40......| | |||
618 | // inj #0 |........|.....###|########|.....###|########|........|........| | |||
619 | // inj #1 |.....###|########|.....###|########|........|........|........| | |||
620 | // assertInjectorUpEvent("5@0", 0, MS2US(-12.5), 1); | |||
621 | // assertInjectorDownEvent("5@1", 1, MS2US(-7.5), 0); | |||
622 | // assertInjectorUpEvent("5@2", 2, MS2US(-2.5), 0); | |||
623 | // assertInjectorDownEvent("5@3", 3, MS2US(0), 1); | |||
624 | // assertInjectorUpEvent("5@4", 4, MS2US(7.5), 1); | |||
625 | // | |||
626 | // assertInjectorDownEvent("5@4", 5, MS2US(10), 0); | |||
627 | // assertInjectorUpEvent("5@6", 6, MS2US(17.5), 0); | |||
628 | // assertInjectorDownEvent("5@7", 7, MS2US(20.0), 1); | |||
629 | // assertInjectorDownEvent("5@8", 8, MS2US(30.0), 0); | |||
630 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 3, eth.executeActions()) << "exec#5"; | |
631 | ||||
632 | /** | |||
633 | * one more revolution | |||
634 | */ | |||
635 | ||||
636 | 2 | t = &engine->injectionEvents; | ||
637 | ||||
638 |
1/1✓ Branch 1 taken 2 times.
|
2 | assertInjectionEventBatch("#0", &t->elements[0], 0, 3, 0, 315); | |
639 |
1/1✓ Branch 1 taken 2 times.
|
2 | assertInjectionEventBatch("#1__", &t->elements[1], 2, 1, 1, 495); | |
640 |
1/1✓ Branch 1 taken 2 times.
|
2 | assertInjectionEventBatch("inj#2", &t->elements[2], 3, 0, 0, 153); | |
641 |
1/1✓ Branch 1 taken 2 times.
|
2 | assertInjectionEventBatch("inj#3", &t->elements[3], 1, 2, 0, 333); | |
642 | ||||
643 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.moveTimeForwardUs(MS2US(20)); | |
644 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 5, engine->scheduler.size()) << "qs#02"; | |
645 | // assertInjectorUpEvent("6@0", 0, MS2US(-12.5), 1); | |||
646 | // assertInjectorDownEvent("6@1", 1, MS2US(-10.0), 0); | |||
647 | // assertInjectorUpEvent("6@2", 2, MS2US(-2.5), 0); | |||
648 | // assertInjectorDownEvent("6@3", 3, MS2US(0), 1); | |||
649 | // assertInjectorDownEvent("6@4", 4, MS2US(10.0), 0); | |||
650 | ||||
651 | // so placing this 'executeAll' changes much? | |||
652 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 5, eth.executeActions()) << "exec#07"; | |
653 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 0, engine->scheduler.size()) << "qs#07"; | |
654 | // assertInjectorDownEvent("26@0", 0, MS2US(10.0), 0); | |||
655 | ||||
656 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.firePrimaryTriggerRise(); | |
657 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 4, engine->scheduler.size()) << "qs#2#2"; | |
658 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 6u, getRevolutionCounter()) << "rev cnt6"; | |
659 | // time...|-20.....|-10.....|0.......|10......|20......|30......|40......| | |||
660 | // inj #0 |########|.....###|########|....####|........|........|........| | |||
661 | // inj #1 |.....###|########|.....###|########|........|........|........| | |||
662 | // assertInjectorDownEvent("06@5", 5, MS2US(30.0), 0); | |||
663 | // assertInjectorUpEvent("06@6", 6, MS2US(37.5), 0); | |||
664 | // assertInjectorDownEvent("06@7", 7, MS2US(40.0), 1); | |||
665 | ||||
666 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 0, eth.executeActions()) << "exec#7"; | |
667 | ||||
668 |
4/14✓ Branch 3 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 32 taken 2 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 43 not taken.
✗ Branch 48 not taken.
✗ Branch 51 not taken.
|
4 | assertInjectors("#1_ij_", 0, 0); | |
669 | ||||
670 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.moveTimeForwardUs(MS2US(20)); | |
671 | ||||
672 | // time...|-20.....|-10.....|0.......|10......|20......|30......|40......| | |||
673 | // inj #0 |########|.......#|........|........|........|........|........| | |||
674 | // inj #1 |....####|########|........|........|........|........|........| | |||
675 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 4, engine->scheduler.size()) << "qs#022"; | |
676 | // assertInjectorUpEvent("7@0", 0, MS2US(-12.5), 1); | |||
677 | // assertInjectorDownEvent("7@1", 1, MS2US(-10.0), 0); | |||
678 | // assertInjectorUpEvent("7@2", 2, MS2US(-2.5), 0); | |||
679 | // assertInjectorDownEvent("7@3", 3, MS2US(0), 1); | |||
680 | // assertInjectorDownEvent("7@4", 4, MS2US(10), 0); | |||
681 | //// assertInjectorDownEvent("i7@5", 5, MS2US(20.0), 0); | |||
682 | //// assertInjectorUpEvent("7@6", 6, MS2US(17.5), 0); | |||
683 | //// assertInjectorDownEvent("7@7", 7, MS2US(20), 1); | |||
684 | // // todo index 8 | |||
685 | ||||
686 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 3, eth.executeActions()) << "executed #06"; | |
687 |
4/14✓ Branch 3 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 32 taken 2 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 43 not taken.
✗ Branch 48 not taken.
✗ Branch 51 not taken.
|
4 | assertInjectors("#4", 1, 0); | |
688 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 1, engine->scheduler.size()) << "qs#06"; | |
689 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.assertInjectorDownEvent("17@0", 0, MS2US(10), 0); | |
690 | // assertInjectorDownEvent("17@1", 1, MS2US(10.0), 0); | |||
691 | // assertInjectorUpEvent("17@2", 2, MS2US(17.5), 0); | |||
692 | // assertInjectorDownEvent("17@3", 3, MS2US(20), 1); | |||
693 | // todo index 4 | |||
694 | ||||
695 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.firePrimaryTriggerFall(); | |
696 | ||||
697 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 5, engine->scheduler.size()) << "qs#3"; | |
698 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 6u, getRevolutionCounter()) << "rev cnt6"; | |
699 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 0, eth.executeActions()) << "executed #6"; | |
700 | ||||
701 | ||||
702 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.moveTimeForwardUs(MS2US(20)); | |
703 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 4, eth.executeActions()) << "executed #06"; | |
704 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 1, engine->scheduler.size()) << "qs#06"; | |
705 |
4/14✓ Branch 3 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 32 taken 2 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 43 not taken.
✗ Branch 48 not taken.
✗ Branch 51 not taken.
|
4 | assertInjectors("inj#2", 1, 0); | |
706 | ||||
707 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.firePrimaryTriggerRise(); | |
708 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 5, engine->scheduler.size()) << "Queue.size#03"; | |
709 | ||||
710 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.assertInjectorUpEvent("07@0", 0, MS2US(7.5), 3); | |
711 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.assertInjectorDownEvent("07@1", 1, MS2US(10), 2); | |
712 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.assertInjectorUpEvent("07@2", 2, MS2US(17.5), 0); | |
713 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.assertInjectorDownEvent("07@3", 3, MS2US(20), 3); | |
714 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.assertInjectorDownEvent("07@4", 4, MS2US(30), 0); | |
715 | // assertInjectorDownEvent("07@5", 5, MS2US(30), 0); | |||
716 | // assertInjectorUpEvent("07@6", 6, MS2US(37.5), 0); | |||
717 | // assertInjectorDownEvent("07@7", 7, MS2US(40), 1); | |||
718 | // assertInjectorDownEvent("07@8", 8, MS2US(50), 0); | |||
719 | ||||
720 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 0, eth.executeActions()) << "executeAll#3"; | |
721 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.moveTimeForwardUs(MS2US(20)); | |
722 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 4, eth.executeActions()) << "executeAll#4"; | |
723 | ||||
724 | 2 | t = &engine->injectionEvents; | ||
725 | ||||
726 |
1/1✓ Branch 1 taken 2 times.
|
2 | assertInjectionEventBatch("#0#", &t->elements[0], 0, 3, 0, 135 + 180); | |
727 |
1/1✓ Branch 1 taken 2 times.
|
2 | assertInjectionEventBatch("#1#", &t->elements[1], 2, 1, 1, 135 + 360); | |
728 |
1/1✓ Branch 1 taken 2 times.
|
2 | assertInjectionEventBatch("#2#", &t->elements[2], 3, 0, 1, 135 + 540); | |
729 |
1/1✓ Branch 1 taken 2 times.
|
2 | assertInjectionEventBatch("#3#", &t->elements[3], 1, 2, 0, 135); | |
730 | ||||
731 | 2 | engine->engineState.injectionDuration = 17.5; | ||
732 | // Injection duration of 17.5ms | |||
733 |
1/1✓ Branch 2 taken 2 times.
|
2 | MockInjectorModel2 im2; | |
734 |
7/7✓ Branch 3 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 10 taken 2 times.
✓ Branch 14 taken 2 times.
✓ Branch 19 taken 2 times.
✓ Branch 22 taken 2 times.
✓ Branch 25 taken 2 times.
|
2 | EXPECT_CALL(im2, getInjectionDuration(_)).WillRepeatedly(Return(17.5f)); | |
735 |
1/1✓ Branch 1 taken 2 times.
|
2 | engine->module<InjectorModelPrimary>().set(&im2); | |
736 | ||||
737 | // duty cycle above 75% is a special use-case because 'special' fuel event overlappes the next normal event in batch mode | |||
738 |
5/11✓ Branch 2 taken 2 times.
✓ Branch 5 taken 2 times.
✓ Branch 8 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 2 times.
✗ Branch 34 not taken.
|
0/1? Decision couldn't be analyzed.
|
2 | ASSERT_NEAR(87.5, getInjectorDutyCycle(round(Sensor::getOrZero(SensorType::Rpm))), EPS4D) << "duty for maf=3"; |
739 | ||||
740 | ||||
741 |
1/1✓ Branch 1 taken 2 times.
|
2 | assertInjectionEventBatch("#03", &t->elements[0], 0, 3, 0, 315); | |
742 | ||||
743 | ||||
744 |
3/9✓ Branch 3 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
|
2 | ASSERT_EQ( 1, enginePins.injectors[0].currentLogicValue) << "inj#0"; | |
745 | ||||
746 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ( 1, engine->scheduler.size()) << "Queue.size#04"; | |
747 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.assertInjectorDownEvent("08@0", 0, MS2US(10), 0); | |
748 | // assertInjectorDownEvent("08@1", 1, MS2US(10), 0); | |||
749 | // assertInjectorUpEvent("08@2", 2, MS2US(17.5), 0); | |||
750 | // assertInjectorDownEvent("08@3", 3, MS2US(20), 1); | |||
751 | // assertInjectorDownEvent("08@4", 4, MS2US(30), 0); | |||
752 | ||||
753 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.firePrimaryTriggerFall(); | |
754 | ||||
755 | ||||
756 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.executeActions(); | |
757 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.fireRise(20); | |
758 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ(9, engine->scheduler.size()) << "Queue.size#05"; | |
759 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.executeActions(); | |
760 | ||||
761 | ||||
762 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.fireFall(20); | |
763 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.executeActions(); | |
764 | ||||
765 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.moveTimeForwardUs(MS2US(20)); | |
766 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.executeActions(); | |
767 |
1/1✓ Branch 1 taken 2 times.
|
2 | eth.firePrimaryTriggerRise(); | |
768 | ||||
769 | 2 | t = &engine->injectionEvents; | ||
770 | ||||
771 |
1/1✓ Branch 1 taken 2 times.
|
2 | assertInjectionEventBatch("#00", &t->elements[0], 0, 3, 0, 225); // 87.5 duty cycle | |
772 |
1/1✓ Branch 1 taken 2 times.
|
2 | assertInjectionEventBatch("#10", &t->elements[1], 2, 1, 1, 45 + 360); | |
773 |
1/1✓ Branch 1 taken 2 times.
|
2 | assertInjectionEventBatch("#20", &t->elements[2], 3, 0, 1, 225 + 360); | |
774 |
1/1✓ Branch 1 taken 2 times.
|
2 | assertInjectionEventBatch("#30", &t->elements[3], 1, 2, 0, 45); | |
775 | ||||
776 | // todo: what's what? a mix of new something and old something? | |||
777 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
|
2 | ASSERT_EQ(6, engine->scheduler.size()) << "qs#5"; | |
778 | // assertInjectorDownEvent("8@0", 0, MS2US(5.0), 1); | |||
779 | // assertInjectorUpEvent("8@1", 1, MS2US(7.5), 1); | |||
780 | // assertInjectorDownEvent("8@2", 2, MS2US(15.0), 0); | |||
781 | // assertInjectorUpEvent("8@3", 3, MS2US(17.5), 0); | |||
782 | // assertInjectorDownEvent("8@4", 4, MS2US(25), 1); | |||
783 | // assertInjectorDownEvent("8@5", 5, MS2US(35), 0); | |||
784 | //// assertInjectorDownEvent("8@6", 6, MS2US(35), 0); | |||
785 | //// assertInjectorUpEvent("8@7", 7, MS2US(37.5), 0); | |||
786 | //// assertInjectorDownEvent("8@8", 8, MS2US(45), 1); | |||
787 | //// assertInjectorDownEvent("8@9", 9, MS2US(55), 0); | |||
788 | ||||
789 |
4/10✓ Branch 3 taken 2 times.
✓ Branch 8 taken 2 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 35 taken 2 times.
✗ Branch 36 not taken.
|
2 | ASSERT_EQ( 0u, getRecentWarnings()->getCount()) << "warningCounter#testFuelSchedulerBug299smallAndMedium"; | |
790 | 2 | } | ||
791 | ||||
792 | 4 | void setInjectionMode(int value) { | ||
793 | 4 | engineConfiguration->injectionMode = (injection_mode_e) value; | ||
794 | 4 | incrementGlobalConfigurationVersion(); | ||
795 | 4 | } | ||
796 | ||||
797 | #if FUEL_RPM_COUNT == 16 | |||
798 | 4 | TEST(big, testFuelSchedulerBug299smallAndMedium) { | ||
799 | 1 | doTestFuelSchedulerBug299smallAndMedium(0); | ||
800 | 1 | doTestFuelSchedulerBug299smallAndMedium(1000); | ||
801 | 1 | } | ||
802 | #endif //FUEL_RPM_COUNT == 16 | |||
803 | ||||
804 | #if FUEL_RPM_COUNT == 16 | |||
805 | 4 | TEST(big, testTwoWireBatch) { | ||
806 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
807 | 1 | setTable(config->injectionPhase, -180.0f); | ||
808 |
1/1✓ Branch 1 taken 1 time.
|
1 | setupSimpleTestEngineWithMafAndTT_ONE_trigger(ð); | |
809 |
5/5✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 13 taken 1 time.
✓ Branch 17 taken 1 time.
|
3 | EXPECT_CALL(*eth.mockAirmass, getAirmass(_, _)) | |
810 |
3/3✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
|
3 | .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); | |
811 | ||||
812 | 1 | engineConfiguration->injectionMode = IM_BATCH; | ||
813 | ||||
814 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireTriggerEventsWithDuration(20); | |
815 | // still no RPM since need to cycles measure cycle duration | |||
816 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireTriggerEventsWithDuration(20); | |
817 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
818 | ||||
819 | /** | |||
820 | * Trigger up - scheduling fuel for full engine cycle | |||
821 | */ | |||
822 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
823 | ||||
824 | 1 | FuelSchedule * t = &engine->injectionEvents; | ||
825 | ||||
826 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEventBatch("#0", &t->elements[0], 0, 3, 1, 153 + 360); // Cyl 1 and 4 | |
827 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEventBatch("#1_i_@", &t->elements[1], 2, 1, 1, 153 + 540); // Cyl 3 and 2 | |
828 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEventBatch("#2@", &t->elements[2], 3, 0, 0, 153); // Cyl 4 and 1 | |
829 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEventBatch("inj#3@", &t->elements[3], 1, 2, 0, 153 + 180); // Cyl 2 and 3 | |
830 | 2 | } | ||
831 | #endif //FUEL_RPM_COUNT == 16 | |||
832 | ||||
833 | #if FUEL_RPM_COUNT == 16 | |||
834 | 4 | TEST(big, testSequential) { | ||
835 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
836 | 1 | setTable(config->injectionPhase, -180.0f); | ||
837 |
5/5✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 13 taken 1 time.
✓ Branch 17 taken 1 time.
|
3 | EXPECT_CALL(*eth.mockAirmass, getAirmass(_, _)) | |
838 |
3/3✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
|
3 | .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); | |
839 | ||||
840 |
1/1✓ Branch 1 taken 1 time.
|
1 | setupSimpleTestEngineWithMafAndTT_ONE_trigger(ð); | |
841 | ||||
842 | 1 | engineConfiguration->injectionMode = IM_SEQUENTIAL; | ||
843 | ||||
844 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireTriggerEventsWithDuration(20); | |
845 | // still no RPM since need to cycles measure cycle duration | |||
846 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireTriggerEventsWithDuration(20); | |
847 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
848 | ||||
849 | /** | |||
850 | * Trigger up - scheduling fuel for full engine cycle | |||
851 | */ | |||
852 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
853 | ||||
854 | 1 | FuelSchedule * t = &engine->injectionEvents; | ||
855 | ||||
856 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEvent("#0", &t->elements[0], 0, 1, 126 + 360); // Cyl 1 | |
857 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEvent("#1_i_@", &t->elements[1], 2, 1, 126 + 540); // Cyl 3 | |
858 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEvent("#2@", &t->elements[2], 3, 0, 126); // Cyl 4 | |
859 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEvent("inj#3@", &t->elements[3], 1, 0, 126 + 180); // Cyl 2 | |
860 | 2 | } | ||
861 | #endif //FUEL_RPM_COUNT == 16 | |||
862 | ||||
863 | #if FUEL_RPM_COUNT == 16 | |||
864 | 4 | TEST(big, testBatch) { | ||
865 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
866 | 1 | setTable(config->injectionPhase, -180.0f); | ||
867 |
5/5✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 13 taken 1 time.
✓ Branch 17 taken 1 time.
|
3 | EXPECT_CALL(*eth.mockAirmass, getAirmass(_, _)) | |
868 |
3/3✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
|
3 | .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); | |
869 | ||||
870 |
1/1✓ Branch 1 taken 1 time.
|
1 | setupSimpleTestEngineWithMafAndTT_ONE_trigger(ð); | |
871 | ||||
872 | 1 | engineConfiguration->injectionMode = IM_BATCH; | ||
873 | ||||
874 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireTriggerEventsWithDuration(20); | |
875 | // still no RPM since need to cycles measure cycle duration | |||
876 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireTriggerEventsWithDuration(20); | |
877 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
878 | ||||
879 | /** | |||
880 | * Trigger up - scheduling fuel for full engine cycle | |||
881 | */ | |||
882 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
883 | ||||
884 | 1 | FuelSchedule * t = &engine->injectionEvents; | ||
885 | ||||
886 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEventBatch("#0", &t->elements[0], 0, 3, 1, 153 + 360); // Cyl 1 + 4 | |
887 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEventBatch("#1_i_@", &t->elements[1], 2, 1, 1, 153 + 540); // Cyl 3 + 2 | |
888 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEventBatch("#2@", &t->elements[2], 3, 0, 0, 153); // Cyl 4 + 1 | |
889 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEventBatch("inj#3@", &t->elements[3], 1, 2, 0, 153 + 180); // Cyl 2 + 3 | |
890 | 2 | } | ||
891 | #endif //FUEL_RPM_COUNT == 16 | |||
892 | ||||
893 | #if FUEL_RPM_COUNT == 16 | |||
894 | 4 | TEST(big, testSinglePoint) { | ||
895 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
896 | 1 | engineConfiguration->hpfpCamLobes = 0; | ||
897 | 1 | setTable(config->injectionPhase, -180.0f); | ||
898 |
5/5✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 13 taken 1 time.
✓ Branch 17 taken 1 time.
|
3 | EXPECT_CALL(*eth.mockAirmass, getAirmass(_, _)) | |
899 |
3/3✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✓ Branch 11 taken 1 time.
|
3 | .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); | |
900 | ||||
901 |
1/1✓ Branch 1 taken 1 time.
|
1 | setupSimpleTestEngineWithMafAndTT_ONE_trigger(ð); | |
902 | ||||
903 | 1 | engineConfiguration->injectionMode = IM_SINGLE_POINT; | ||
904 | ||||
905 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireTriggerEventsWithDuration(20); | |
906 | // still no RPM since need to cycles measure cycle duration | |||
907 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireTriggerEventsWithDuration(20); | |
908 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
909 | ||||
910 | /** | |||
911 | * Trigger up - scheduling fuel for full engine cycle | |||
912 | */ | |||
913 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
914 | ||||
915 | 1 | FuelSchedule * t = &engine->injectionEvents; | ||
916 | ||||
917 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEvent("#0", &t->elements[0], 0, 1, 126 + 360); // Cyl 1 | |
918 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEvent("#1_i_@", &t->elements[1], 0, 1, 126 + 540); // Cyl 3 | |
919 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEvent("#2@", &t->elements[2], 0, 0, 126); // Cyl 4 | |
920 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertInjectionEvent("inj#3@", &t->elements[3], 0, 0, 126 + 180); // Cyl 2 | |
921 | 2 | } | ||
922 | #endif //FUEL_RPM_COUNT == 16 | |||
923 | ||||
924 | #if FUEL_RPM_COUNT == 16 | |||
925 | 4 | TEST(big, testFuelSchedulerBug299smallAndLarge) { | ||
926 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
927 | extern bool unitTestBusyWaitHack; | |||
928 | 1 | unitTestBusyWaitHack = true; | ||
929 | 1 | engineConfiguration->hpfpCamLobes = 0; | ||
930 | 1 | setTable(config->injectionPhase, -180.0f); | ||
931 | 1 | engineConfiguration->isFasterEngineSpinUpEnabled = false; | ||
932 | 1 | engine->tdcMarkEnabled = false; | ||
933 |
1/1✓ Branch 1 taken 1 time.
|
1 | setTestBug299(ð); | |
934 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 4, engine->scheduler.size()) << "Lqs#0"; | |
935 | ||||
936 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->periodicFastCallback(); | |
937 | ||||
938 | 1 | engine->engineState.injectionDuration = 17.5f; | ||
939 | // Injection duration of 17.5ms | |||
940 |
1/1✓ Branch 2 taken 1 time.
|
1 | MockInjectorModel2 im; | |
941 |
7/7✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
✓ Branch 19 taken 1 time.
✓ Branch 22 taken 1 time.
✓ Branch 25 taken 1 time.
|
1 | EXPECT_CALL(im, getInjectionDuration(_)).WillRepeatedly(Return(17.5f)); | |
942 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->module<InjectorModelPrimary>().set(&im); | |
943 | ||||
944 |
5/11✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
0/1? Decision couldn't be analyzed.
|
1 | ASSERT_NEAR(87.5, getInjectorDutyCycle(round(Sensor::getOrZero(SensorType::Rpm))), EPS4D) << "Lduty for maf=3"; |
945 | ||||
946 | ||||
947 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 4, engine->scheduler.size()) << "Lqs#1"; | |
948 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardUs(MS2US(20)); | |
949 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
950 | ||||
951 | // injector #1 is low before the test | |||
952 |
2/9✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_FALSE(enginePins.injectors[0].currentLogicValue) << "injector@0"; | |
953 | ||||
954 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.firePrimaryTriggerRise(); | |
955 | ||||
956 | // time...|0.......|10......|20......|30......|40......|50......|60......| | |||
957 | // inj #0 |########|########|########|.....###|########|........|........| | |||
958 | // inj #1 |..######|########|....####|########|........|........|........| | |||
959 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 6, engine->scheduler.size()) << "Lqs#4"; | |
960 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.assertInjectorUpEvent("L04@0", 0, MS2US(8.5), 2); | |
961 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.assertInjectorUpEvent("L04@1", 1, MS2US(12.5), 0); | |
962 | // special overlapping injection is merged with one of the scheduled injections | |||
963 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.assertInjectorUpEvent("L04@2", 2, MS2US(18.5), 3); | |
964 | ||||
965 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.assertInjectorDownEvent("L04@3", 3, MS2US(26), 2); | |
966 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.assertInjectorDownEvent("L04@4", 4, MS2US(30), 0); | |
967 | ||||
968 | // assertInjectorDownEvent("L04@5", 5, MS2US(30), 0); | |||
969 | // assertInjectorUpEvent("L04@6", 6, MS2US(32.5), 0); | |||
970 | // assertInjectorDownEvent("L04@7", 7, MS2US(40.0), 1); | |||
971 | // assertInjectorDownEvent("L04@8", 8, MS2US(50.0), 0); | |||
972 | ||||
973 | ||||
974 |
2/2✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
|
1 | engine->scheduler.executeAll(getTimeNowUs() + 1); | |
975 | // injector goes high... | |||
976 |
2/9✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_FALSE(enginePins.injectors[0].currentLogicValue) << "injector@1"; | |
977 | ||||
978 |
2/2✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
|
1 | engine->scheduler.executeAll(getTimeNowUs() + MS2US(17.5) + 1); | |
979 | // injector does not go low too soon, that's a feature :) | |||
980 |
2/9✗ Branch 3 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 7 not taken.
✗ Branch 10 not taken.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_TRUE(enginePins.injectors[0].currentLogicValue) << "injector@2"; | |
981 | ||||
982 | ||||
983 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(20); | |
984 | ||||
985 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 6, engine->scheduler.size()) << "Lqs#04"; | |
986 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.assertInjectorUpEvent("L015@0", 0, MS2US(-1.5), 3); | |
987 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.assertInjectorUpEvent("L015@1", 1, MS2US(2.5), 1); | |
988 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.assertInjectorDownEvent("L015@2", 2, MS2US(6), 2); | |
989 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.assertInjectorDownEvent("L015@3", 3, MS2US(10), 0); | |
990 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.assertInjectorDownEvent("L015@4", 4, MS2US(16), 3); | |
991 | //todo assertInjectorDownEvent("L015@5", 5, MS2US(30), 0); | |||
992 | ||||
993 | ||||
994 |
2/2✓ Branch 1 taken 1 time.
✓ Branch 4 taken 1 time.
|
1 | engine->scheduler.executeAll(getTimeNowUs() + MS2US(10) + 1); | |
995 | // end of combined injection | |||
996 |
2/9✗ Branch 5 not taken.
✓ Branch 6 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_FALSE(enginePins.injectors[0].currentLogicValue) << "injector@3"; | |
997 | ||||
998 | ||||
999 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardUs(MS2US(20)); | |
1000 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1001 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 0, engine->scheduler.size()) << "Lqs#04"; | |
1002 | ||||
1003 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->periodicFastCallback(); | |
1004 | ||||
1005 | // Injection duration of 2ms | |||
1006 | 1 | engine->engineState.injectionDuration = 2.0f; | ||
1007 |
1/1✓ Branch 2 taken 1 time.
|
1 | MockInjectorModel2 im2; | |
1008 |
7/7✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 14 taken 1 time.
✓ Branch 19 taken 1 time.
✓ Branch 22 taken 1 time.
✓ Branch 25 taken 1 time.
|
1 | EXPECT_CALL(im2, getInjectionDuration(_)).WillRepeatedly(Return(2.0f)); | |
1009 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->module<InjectorModelPrimary>().set(&im2); | |
1010 | ||||
1011 |
5/11✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 time.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 27 not taken.
✗ Branch 30 not taken.
✓ Branch 37 taken 1 time.
✗ Branch 38 not taken.
|
0/1? Decision couldn't be analyzed.
|
1 | ASSERT_EQ( 10, getInjectorDutyCycle(round(Sensor::getOrZero(SensorType::Rpm)))) << "Lduty for maf=3"; |
1012 | ||||
1013 | ||||
1014 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.firePrimaryTriggerRise(); | |
1015 | ||||
1016 | //todoASSERT_EQ( 5, engine->scheduler.size()) << "Lqs#05"; | |||
1017 | //todo assertInjectorUpEvent("L016@0", 0, MS2US(8), 0); | |||
1018 | //todo assertInjectorDownEvent("L016@1", 1, MS2US(10), 0); | |||
1019 | //todo assertInjectorDownEvent("L016@2", 2, MS2US(10), 0); | |||
1020 | ||||
1021 | ||||
1022 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardUs(MS2US(20)); | |
1023 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); // issue here | |
1024 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.firePrimaryTriggerFall(); | |
1025 | ||||
1026 | ||||
1027 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardUs(MS2US(20)); | |
1028 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1029 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.firePrimaryTriggerRise(); | |
1030 | ||||
1031 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 4, engine->scheduler.size()) << "Lqs#5"; | |
1032 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.assertInjectorUpEvent("L05@0", 0, MS2US(8), 2); | |
1033 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.assertInjectorDownEvent("L05@1", 1, MS2US(10), 2); | |
1034 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.assertInjectorUpEvent("L05@2", 2, MS2US(18), 3); | |
1035 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.assertInjectorDownEvent("L05@3", 3, MS2US(20), 3); | |
1036 | ||||
1037 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardUs(MS2US(20)); | |
1038 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1039 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 35 taken 1 time.
✗ Branch 36 not taken.
|
1 | ASSERT_EQ( 0u, getRecentWarnings()->getCount()) << "warningCounter#testFuelSchedulerBug299smallAndLarge"; | |
1040 | 1 | } | ||
1041 | #endif //FUEL_RPM_COUNT == 16 | |||
1042 | ||||
1043 | 4 | TEST(big, testSparkReverseOrderBug319) { | ||
1044 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("*************************************************** testSparkReverseOrderBug319 small to medium\r\n"); | |
1045 | ||||
1046 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
1047 | 1 | engineConfiguration->isFasterEngineSpinUpEnabled = false; | ||
1048 | 1 | engine->tdcMarkEnabled = false; | ||
1049 | ||||
1050 | 1 | engineConfiguration->isInjectionEnabled = false; | ||
1051 | 1 | engineConfiguration->cylindersCount = 4; | ||
1052 | 1 | engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; | ||
1053 | ||||
1054 |
1/1✓ Branch 1 taken 1 time.
|
1 | setConstantDwell(45); | |
1055 | ||||
1056 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->triggerCentral.syncEnginePhaseAndReport(2, 0); | |
1057 | ||||
1058 | // this is needed to update injectorLag | |||
1059 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->updateSlowSensors(); | |
1060 | ||||
1061 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.setTriggerType(trigger_type_e::TT_HALF_MOON); | |
1062 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->periodicFastCallback(); | |
1063 | ||||
1064 |
1/1✓ Branch 1 taken 1 time.
|
1 | setWholeTimingTable(0); | |
1065 | ||||
1066 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
1067 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(20); | |
1068 | ||||
1069 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->triggerCentral.syncEnginePhaseAndReport(2, 0); | |
1070 | ||||
1071 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1072 | ||||
1073 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
1074 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(20); | |
1075 | ||||
1076 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 3000, round(Sensor::getOrZero(SensorType::Rpm))) << "testSparkReverseOrderBug319: RPM"; | |
1077 | ||||
1078 | ||||
1079 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 8, engine->scheduler.size()) << "testSparkReverseOrderBug319: queue size"; | |
1080 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1081 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("***************************************************\r\n"); | |
1082 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 0, engine->engineState.sparkOutOfOrderCounter) << "out-of-order #1"; | |
1083 | ||||
1084 | ||||
1085 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
1086 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1087 | ||||
1088 | /** | |||
1089 | * here we throw scheduling logic off | |||
1090 | */ | |||
1091 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(0.1); // executing new signal too early | |
1092 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1093 | ||||
1094 | ||||
1095 | ||||
1096 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.moveTimeForwardUs(MS2US(200)); // moving time forward to execute all pending actions | |
1097 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1098 | ||||
1099 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 1, engine->engineState.sparkOutOfOrderCounter) << "out-of-order #2"; | |
1100 | ||||
1101 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("*************************************************** now let's have a good engine cycle and confirm things work\r\n"); | |
1102 | ||||
1103 | ||||
1104 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
1105 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1106 | ||||
1107 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 545, round(Sensor::getOrZero(SensorType::Rpm))) << "RPM#2"; | |
1108 | ||||
1109 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 1, engine->engineState.sparkOutOfOrderCounter) << "out-of-order #3"; | |
1110 | ||||
1111 | ||||
1112 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(20); | |
1113 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1114 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 1u, engine->engineState.sparkOutOfOrderCounter) << "out-of-order #4"; | |
1115 | ||||
1116 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("*************************************************** (rpm is back) now let's have a good engine cycle and confirm things work\r\n"); | |
1117 | ||||
1118 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
1119 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1120 | ||||
1121 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 3000, round(Sensor::getOrZero(SensorType::Rpm))) << "RPM#3"; | |
1122 | ||||
1123 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 1, engine->engineState.sparkOutOfOrderCounter) << "out-of-order #5 on c4"; | |
1124 | ||||
1125 | ||||
1126 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(20); | |
1127 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1128 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 1, engine->engineState.sparkOutOfOrderCounter) << "out-of-order #6 on c4"; | |
1129 | ||||
1130 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("*************************************************** (rpm is back 2) now let's have a good engine cycle and confirm things work\r\n"); | |
1131 | ||||
1132 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
1133 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1134 | ||||
1135 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ( 3000, round(Sensor::getOrZero(SensorType::Rpm))) << "RPM#4"; | |
1136 | ||||
1137 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 1, engine->engineState.sparkOutOfOrderCounter) << "out-of-order #7"; | |
1138 | ||||
1139 | ||||
1140 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(20); | |
1141 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1142 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 1, engine->engineState.sparkOutOfOrderCounter) << "out-of-order #8"; | |
1143 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 35 taken 1 time.
✗ Branch 36 not taken.
|
1 | ASSERT_EQ( 2u, getRecentWarnings()->getCount()) << "warningCounter#SparkReverseOrderBug319"; | |
1144 |
4/10✓ Branch 2 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_EQ(ObdCode::CUSTOM_DWELL_TOO_LONG, getRecentWarnings()->get(0).Code) << "warning @0"; | |
1145 |
4/9✓ Branch 2 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
|
1 | ASSERT_EQ(ObdCode::CUSTOM_OUT_OF_ORDER_COIL, getRecentWarnings()->get(1).Code); | |
1146 | 1 | } | ||
1147 | ||||
1148 | // https://sourceforge.net/p/rusefi/tickets/299/ | |||
1149 | // this is not a test of wasted spark! | |||
1150 | 4 | TEST(big, testAssertWeAreNotMissingASpark299) { | ||
1151 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("*************************************************** testMissedSpark299\r\n"); | |
1152 | ||||
1153 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
1154 | 1 | engineConfiguration->ignitionMode = IM_WASTED_SPARK; | ||
1155 |
1/1✓ Branch 1 taken 1 time.
|
1 | setupSimpleTestEngineWithMafAndTT_ONE_trigger(ð); | |
1156 | 1 | engineConfiguration->isIgnitionEnabled = true; | ||
1157 | 1 | engineConfiguration->isInjectionEnabled = false; | ||
1158 | ||||
1159 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 35 taken 1 time.
✗ Branch 36 not taken.
|
1 | ASSERT_EQ( 0u, getRecentWarnings()->getCount()) << "warningCounter#0"; | |
1160 | ||||
1161 | // todo: migrate to 'smartFireRise' see header which explains the difference | |||
1162 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
1163 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1164 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 0u, engine->triggerCentral.triggerState.currentCycle.current_index) << "ci#0"; | |
1165 | ||||
1166 | ||||
1167 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(20); | |
1168 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1169 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 1u, engine->triggerCentral.triggerState.currentCycle.current_index) << "ci#1"; | |
1170 | ||||
1171 | ||||
1172 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
1173 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1174 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 0u, engine->triggerCentral.triggerState.currentCycle.current_index) << "ci#2"; | |
1175 | ||||
1176 | ||||
1177 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(20); | |
1178 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1179 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 1u, engine->triggerCentral.triggerState.currentCycle.current_index) << "ci#3"; | |
1180 | ||||
1181 | ||||
1182 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
1183 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1184 | ||||
1185 | ||||
1186 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(20); | |
1187 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1188 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 30 not taken.
|
1 | ASSERT_EQ( 1u, eth.engine.triggerCentral.triggerState.currentCycle.current_index) << "ci#5"; | |
1189 | ||||
1190 | ||||
1191 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("*************************************************** testMissedSpark299 start\r\n"); | |
1192 | ||||
1193 |
4/9✓ Branch 3 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.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
|
1 | ASSERT_EQ(3000, Sensor::getOrZero(SensorType::Rpm)); | |
1194 | ||||
1195 | // positive advance scenario which is the typical case | |||
1196 |
1/1✓ Branch 1 taken 1 time.
|
1 | setWholeTimingTable(3); | |
1197 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.engine.periodicFastCallback(); | |
1198 | ||||
1199 | ||||
1200 | ||||
1201 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
1202 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1203 | ||||
1204 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(20); | |
1205 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1206 | ||||
1207 | ||||
1208 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
1209 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1210 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(20); | |
1211 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1212 | ||||
1213 | // negative advance is rarely used but worth testing considering all out angleWrap. | |||
1214 |
1/1✓ Branch 1 taken 1 time.
|
1 | setWholeTimingTable(-5); | |
1215 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.engine.periodicFastCallback(); | |
1216 | ||||
1217 | ||||
1218 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
1219 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1220 | ||||
1221 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(20); | |
1222 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1223 | ||||
1224 | ||||
1225 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireRise(20); | |
1226 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1227 | ||||
1228 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.fireFall(20); | |
1229 |
1/1✓ Branch 1 taken 1 time.
|
1 | eth.executeActions(); | |
1230 | ||||
1231 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✓ Branch 35 taken 1 time.
✗ Branch 36 not taken.
|
1 | ASSERT_EQ( 0u, getRecentWarnings()->getCount()) << "warningCounter#1"; | |
1232 | 1 | } | ||
1233 |