GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/ignition_injection/test_fuel_wall_wetting.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 51 0 51
Functions: 100.0% 12 0 12
Branches: 57.1% 88 0 154
Decisions: 100.0% 8 - 8

Line Branch Decision Exec Source
1 /*
2 * @file test_fuel_wall_wetting.cpp
3 *
4 * See also test_accel_enrichment.cpp
5 *
6 * @date Oct 16, 2019
7 * @author Andrey Belomutskiy, (c) 2012-2020
8 */
9
10 #include "pch.h"
11
12 struct MockWallController : public IWallFuelController {
13 111 MOCK_METHOD(bool, getEnable, (), (const, override));
14 111 MOCK_METHOD(float, getAlpha, (), (const, override));
15 111 MOCK_METHOD(float, getBeta, (), (const, override));
16 };
17
18 4 TEST(fuel, testWallWettingEnrichmentMath) {
19
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
20
21
1/1
✓ Branch 2 taken 1 time.
1 MockWallController wallController;
22
23 // WW is enabled!
24
6/6
✓ Branch 2 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 15 taken 1 time.
✓ Branch 18 taken 1 time.
✓ Branch 21 taken 1 time.
1 EXPECT_CALL(wallController, getEnable()).WillRepeatedly(Return(true));
25
26 // 1/2 of fuel remains on walls
27
6/6
✓ Branch 2 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 15 taken 1 time.
✓ Branch 18 taken 1 time.
✓ Branch 21 taken 1 time.
1 EXPECT_CALL(wallController, getAlpha()).WillRepeatedly(Return(0.5f));
28
29 // 1/4 of fuel is lands on walls
30
6/6
✓ Branch 2 taken 1 time.
✓ Branch 6 taken 1 time.
✓ Branch 10 taken 1 time.
✓ Branch 15 taken 1 time.
✓ Branch 18 taken 1 time.
✓ Branch 21 taken 1 time.
1 EXPECT_CALL(wallController, getBeta()).WillRepeatedly(Return(0.25f));
31
32 // install our mock in to the engine
33
1/1
✓ Branch 1 taken 1 time.
1 engine->engineModules.get<WallFuelController>().set(&wallController);
34
35 1 WallFuel wallFuel;
36
37 // each invocation of 'adjust' changes WallWetting internal state
38
3/7
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
1 EXPECT_NEAR(1.3333, wallFuel.adjust(1), EPS4D);
39
3/7
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
1 EXPECT_NEAR(1.1111, wallFuel.adjust(1), EPS4D);
40
3/7
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
1 EXPECT_NEAR(1.0370, wallFuel.adjust(1), EPS4D);
41
3/7
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
1 EXPECT_NEAR(1.0123, wallFuel.adjust(1), EPS4D);
42
43 // get to steady state
44
2/2
✓ Branch 0 taken 50 times.
✓ Branch 1 taken 1 time.
2/2
✓ Decision 'true' taken 50 times.
✓ Decision 'false' taken 1 time.
51 for (size_t i = 0; i < 50; i++) {
45
1/1
✓ Branch 1 taken 50 times.
50 wallFuel.adjust(1);
46 }
47
48
3/7
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
1 EXPECT_NEAR(1, wallFuel.adjust(1), EPS4D);
49
50 // now run half the fuel
51
3/7
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
1 EXPECT_NEAR(0.3333, wallFuel.adjust(0.5), EPS4D);
52
3/7
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
1 EXPECT_NEAR(0.4444, wallFuel.adjust(0.5), EPS4D);
53
3/7
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
1 EXPECT_NEAR(0.4815, wallFuel.adjust(0.5), EPS4D);
54
3/7
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
1 EXPECT_NEAR(0.4938, wallFuel.adjust(0.5), EPS4D);
55
56
2/2
✓ Branch 0 taken 50 times.
✓ Branch 1 taken 1 time.
2/2
✓ Decision 'true' taken 50 times.
✓ Decision 'false' taken 1 time.
51 for (size_t i = 0; i < 50; i++) {
57
1/1
✓ Branch 1 taken 50 times.
50 wallFuel.adjust(0.5);
58 }
59
60
3/7
✓ Branch 2 taken 1 time.
✓ Branch 5 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
1 EXPECT_NEAR(0.5, wallFuel.adjust(0.5), EPS4D);
61 2 }
62
63 4 TEST(fuel, testWallWettingEnrichmentScheduling) {
64
65
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
66 1 engineConfiguration->isFasterEngineSpinUpEnabled = false;
67
68
1/1
✓ Branch 1 taken 1 time.
1 setCrankOperationMode();
69
70
1/1
✓ Branch 1 taken 1 time.
1 eth.setTriggerType(trigger_type_e::TT_HALF_MOON);
71
72
73
1/1
✓ Branch 1 taken 1 time.
1 eth.fireTriggerEvents2(/* count */ 4, 25 /* ms */);
74
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( 1200, Sensor::getOrZero(SensorType::Rpm)) << "RPM";
75
76 1 int expectedInvocationCounter = 1;
77
78
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 = 0; i < 4; i++) {
79
4/9
✓ Branch 3 taken 4 times.
✓ Branch 6 taken 4 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 28 taken 4 times.
✗ Branch 29 not taken.
4 ASSERT_EQ(expectedInvocationCounter, engine->injectionEvents.elements[i].getWallFuel().invocationCounter);
80 }
81
82 // Cylinder 5 doesn't exist - shouldn't have been called!
83
4/9
✓ Branch 2 taken 1 time.
✓ Branch 6 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(0, engine->injectionEvents.elements[5].getWallFuel().invocationCounter);
84
85
1/1
✓ Branch 1 taken 1 time.
1 eth.engine.periodicFastCallback();
86
1/1
✓ Branch 1 taken 1 time.
1 eth.engine.periodicFastCallback();
87
1/1
✓ Branch 1 taken 1 time.
1 eth.engine.periodicFastCallback();
88
89 // still same 1 per cylinder - wall wetting is NOT invoked from 'periodicFastCallback'
90
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 = 0; i < 4; i++) {
91
4/9
✓ Branch 3 taken 4 times.
✓ Branch 6 taken 4 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 28 taken 4 times.
✗ Branch 29 not taken.
4 ASSERT_EQ(expectedInvocationCounter, engine->injectionEvents.elements[i].getWallFuel().invocationCounter);
92 }
93
94 // Cylinder 5 doesn't exist - shouldn't have been called!
95
4/9
✓ Branch 2 taken 1 time.
✓ Branch 6 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(0, engine->injectionEvents.elements[5].getWallFuel().invocationCounter);
96 1 }
97