GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/ignition_injection/test_startOfCrankingPrimingPulse.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 43 0 43
Functions: 100.0% 9 0 9
Branches: 56.6% 56 0 99
Decisions: 100.0% 2 - 2

Line Branch Decision Exec Source
1 /*
2 * test_startOfCrankingPrimingPulse.cpp
3 *
4 * Created on: Mar 4, 2018
5 * @author Andrey Belomutskiy, (c) 2012-2020
6 */
7
8 #include "pch.h"
9 #include "util/injection_crank_helper.h"
10
11 4 TEST(engine, testPlainCrankingWithoutAdvancedFeatures) {
12
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
13 1 setTable(config->injectionPhase, -180.0f);
14 1 engineConfiguration->isFasterEngineSpinUpEnabled = false;
15 1 engine->tdcMarkEnabled = false;
16
1/1
✓ Branch 1 taken 1 time.
1 setTestFuelCrankingTable(12);
17
18
1/1
✓ Branch 1 taken 1 time.
1 setupSimpleTestEngineWithMafAndTT_ONE_trigger(&eth);
19
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, Sensor::getOrZero(SensorType::Rpm)) << "RPM=0";
20
21
1/1
✓ Branch 1 taken 1 time.
1 eth.fireTriggerEventsWithDuration(/* durationMs */ 200);
22 // still no RPM since need to cycles measure cycle duration
23
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, Sensor::getOrZero(SensorType::Rpm)) << "start-RPM#1";
24
25
26
1/1
✓ Branch 1 taken 1 time.
1 eth.fireRise(/* delayMs */ 200);
27
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(300, Sensor::getOrZero(SensorType::Rpm));
28 // two simultaneous injections
29
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()) << "plain#2";
30
31 1 auto const startSimultaneousInjectionAction{ action_s::make<startSimultaneousInjection>() };
32 1 auto const endSimultaneousInjectionAction{ action_s::make<endSimultaneousInjection>((InjectionEvent*){})};
33
34
1/1
✓ Branch 1 taken 1 time.
1 eth.assertEvent5("sim start", 0, startSimultaneousInjectionAction, 100000 - 1625);
35 // -1 because ugh floating point math
36
1/1
✓ Branch 1 taken 1 time.
1 eth.assertEvent5("sim end", 1, endSimultaneousInjectionAction, 100000 - 1);
37 1 }
38
39
40 4 TEST(priming, startScheduling) {
41
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
42
43
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, Sensor::getOrZero(SensorType::Rpm)) << "RPM=0";
44
45 // Turn on the ignition switch!
46
2/2
✓ Branch 1 taken 1 time.
✓ Branch 5 taken 1 time.
1 engine->module<PrimeController>()->onIgnitionStateChanged(true);
47
48
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(1, engine->scheduler.size()) << "prime fuel";
49 1 }
50
51 4 TEST(priming, duration) {
52
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
53
54
1/1
✓ Branch 2 taken 1 time.
1 MockInjectorModel2 injectorModel;
55
1/1
✓ Branch 1 taken 1 time.
1 engine->module<InjectorModelPrimary>().set(&injectorModel);
56
57
2/2
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 1 time.
2/2
✓ Decision 'true' taken 8 times.
✓ Decision 'false' taken 1 time.
9 for (size_t i = 0; i < efi::size(engineConfiguration->primeBins); i++) {
58 8 engineConfiguration->primeBins[i] = i * 10;
59 }
60
61
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(injectorModel, getInjectionDuration(0.075f)).WillOnce(Return(20.0f));
62 1 engineConfiguration->primeValues[5] = 75; // <-- We test this point
63
64 // With coolant temp, we should see value from mock
65
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Clt, 50);
66
4/8
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 11 taken 1 time.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 time.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
1 EXPECT_EQ(20, engine->module<PrimeController>()->getPrimeDuration());
67
68 // Without coolant temp, no prime
69
1/1
✓ Branch 1 taken 1 time.
1 Sensor::resetMockValue(SensorType::Clt);
70
4/8
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✓ Branch 11 taken 1 time.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 time.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
1 EXPECT_EQ(0, engine->module<PrimeController>()->getPrimeDuration());
71 2 }
72