GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/trigger/test_real_4g93.cpp
Date: 2025-10-03 00:57:22
Warnings: 3 unchecked decisions!
Coverage Exec Excl Total
Lines: 100.0% 68 0 68
Functions: 100.0% 9 0 9
Branches: 54.0% 81 0 150
Decisions: 62.5% 10 - 16

Line Branch Decision Exec Source
1 // file test_real_4b11.cpp
2 // Mitsubishi 4G93 trigger pattern
3 // Crank: 2 teeth per rev (4 teeth per cycle)
4 // Cam: 4G92/93/94 pattern (big tooth - small tooth)
5
6 #include "pch.h"
7
8 #include "engine_csv_reader.h"
9
10 4 TEST(real4g93, cranking) {
11
1/1
✓ Branch 2 taken 1 time.
1 EngineCsvReader reader(1, /* vvtCount */ 1);
12
13
1/1
✓ Branch 1 taken 1 time.
1 reader.open("tests/trigger/resources/4g93-cranking.csv");
14
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
15 1 engineConfiguration->isFasterEngineSpinUpEnabled = true;
16 1 engineConfiguration->alwaysInstantRpm = true;
17
18 1 engineConfiguration->isPhaseSyncRequiredForIgnition = true;
19
20 1 engineConfiguration->vvtMode[0] = VVT_MITSUBISHI_4G63;
21
22
1/1
✓ Branch 1 taken 1 time.
1 eth.setTriggerType(trigger_type_e::TT_MITSU_4G63_CRANK);
23
24 static const float gapRatios[2][4] = {
25 { 0, NAN, INFINITY, 0.89f }, // no sync
26 { 0.4f, 3.788f, 0.62f, 1.02f }
27 };
28 static const int gapRatioIndices[12] = { 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3 };
29
30
3/3
✓ Branch 1 taken 194 times.
✓ Branch 3 taken 193 times.
✓ Branch 4 taken 1 time.
0/1
? Decision couldn't be analyzed.
194 for (int idx = 0; reader.haveMore(); idx++) {
31
1/1
✓ Branch 1 taken 193 times.
193 reader.processLine(&eth);
32
33 // Expect that all teeth are in the correct spot
34
35
1/1
✓ Branch 1 taken 193 times.
193 TriggerCentral *tc = getTriggerCentral();
36
37 // We should get first RPM on exactly the first sync point - this means the instant RPM pre-sync event copy all worked OK
38
1/1
✓ Branch 1 taken 193 times.
193 reader.assertFirstRpm(133, 6);
39
1/1
✓ Branch 1 taken 193 times.
193 auto rpm = Sensor::getOrZero(SensorType::Rpm);
40
41
6/6
✓ Branch 0 taken 17 times.
✓ Branch 1 taken 176 times.
✓ Branch 3 taken 1 time.
✓ Branch 4 taken 16 times.
✓ Branch 5 taken 1 time.
✓ Branch 6 taken 192 times.
2/2
✓ Decision 'true' taken 1 time.
✓ Decision 'false' taken 192 times.
193 if (!reader.gotSync && tc->triggerState.hasSynchronizedPhase()) {
42 1 reader.gotSync = true;
43
44
2/6
✓ 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.
1 EXPECT_EQ(reader.lineIndex(), 17);
45
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(rpm, 204.01f, 0.1);
46 }
47
48 193 TriggerDecoderBase& vvtDecoder = tc->vvtState[/*bankIndex*/0][/*camIndex*/0];
49
50 193 float vvtSyncGapRatio = vvtDecoder.triggerSyncGapRatio;
51 193 float gapRatio = gapRatios[idx < 12 ? 0 : 1][gapRatioIndices[idx % 12]];
52
2/2
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 190 times.
2/2
✓ Decision 'true' taken 3 times.
✓ Decision 'false' taken 190 times.
193 if (std::isnan(gapRatio)) {
53
1/6
✗ Branch 6 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 10 not taken.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
3 EXPECT_TRUE(std::isnan(vvtSyncGapRatio));
54
2/2
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 187 times.
2/2
✓ Decision 'true' taken 3 times.
✓ Decision 'false' taken 187 times.
190 } else if (std::isinf(gapRatio)) {
55
1/6
✗ Branch 6 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 10 not taken.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
3 EXPECT_TRUE(std::isinf(vvtSyncGapRatio));
56 }else {
57
2/6
✓ Branch 2 taken 187 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 187 times.
✗ Branch 9 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
187 EXPECT_NEAR(vvtSyncGapRatio, gapRatio, 0.1);
58 }
59 }
60
61
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(reader.gotRpm);
62
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(reader.gotSync);
63
64
4/9
✓ Branch 3 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
1 ASSERT_EQ(0u, eth.recentWarnings()->getCount());
65 1 }
66
67 4 TEST(real4g93, crankingOn11) {
68
1/1
✓ Branch 2 taken 1 time.
1 EngineCsvReader reader(2, /* vvtCount */ 0);
69
70
1/1
✓ Branch 1 taken 1 time.
1 reader.open("tests/trigger/resources/4g93-cranking.csv");
71
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
72 1 engineConfiguration->isFasterEngineSpinUpEnabled = true;
73
74 1 engineConfiguration->isPhaseSyncRequiredForIgnition = true;
75
76
1/1
✓ Branch 1 taken 1 time.
1 eth.setTriggerType(trigger_type_e::TT_MAZDA_MIATA_NA);
77
78
3/3
✓ Branch 1 taken 194 times.
✓ Branch 3 taken 193 times.
✓ Branch 4 taken 1 time.
0/1
? Decision couldn't be analyzed.
194 while (reader.haveMore()) {
79
1/1
✓ Branch 1 taken 193 times.
193 reader.processLine(&eth);
80
1/1
✓ Branch 1 taken 193 times.
193 reader.assertFirstRpm(168, 7);
81 }
82 2 }
83
84 4 TEST(real4g93, crankingCamOnly) {
85
1/1
✓ Branch 2 taken 1 time.
1 EngineCsvReader reader(1, /* vvtCount */ 0);
86
87
1/1
✓ Branch 1 taken 1 time.
1 reader.open("tests/trigger/resources/4g93-cranking-cam-only.csv");
88
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
89 1 engineConfiguration->isFasterEngineSpinUpEnabled = true;
90 1 engineConfiguration->alwaysInstantRpm = true;
91
92
1/1
✓ Branch 1 taken 1 time.
1 eth.setTriggerType(trigger_type_e::TT_MITSU_4G63_CAM);
93
94
3/3
✓ Branch 1 taken 194 times.
✓ Branch 3 taken 193 times.
✓ Branch 4 taken 1 time.
0/1
? Decision couldn't be analyzed.
194 while (reader.haveMore()) {
95
1/1
✓ Branch 1 taken 193 times.
193 reader.processLine(&eth);
96
97 // Expect that all teeth are in the correct spot
98
1/1
✓ Branch 1 taken 193 times.
193 auto rpm = Sensor::getOrZero(SensorType::Rpm);
99
4/4
✓ Branch 0 taken 17 times.
✓ Branch 1 taken 176 times.
✓ Branch 2 taken 1 time.
✓ Branch 3 taken 16 times.
2/2
✓ Decision 'true' taken 1 time.
✓ Decision 'false' taken 192 times.
193 if (!reader.gotRpm && rpm) {
100 1 reader.gotRpm = true;
101
102 // We should get first RPM on exactly the first sync point - this means the instant RPM pre-sync event copy all worked OK
103
2/6
✓ 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.
1 EXPECT_EQ(reader.lineIndex(), 17);
104
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(rpm, 194.61f, 0.1);
105 }
106
107
8/9
✓ Branch 0 taken 17 times.
✓ Branch 1 taken 176 times.
✓ Branch 3 taken 17 times.
✓ Branch 5 taken 1 time.
✓ Branch 6 taken 16 times.
✓ Branch 8 taken 1 time.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 time.
✓ Branch 11 taken 192 times.
2/2
✓ Decision 'true' taken 1 time.
✓ Decision 'false' taken 192 times.
193 if (!reader.gotSync && engine->triggerCentral.triggerState.getShaftSynchronized() && engine->triggerCentral.triggerState.hasSynchronizedPhase()) {
108 1 reader.gotSync = true;
109
110
2/6
✓ 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.
1 EXPECT_EQ(reader.lineIndex(), 17);
111 }
112 }
113
114
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(reader.gotRpm);
115
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(reader.gotSync);
116
117
4/9
✓ Branch 3 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✓ Branch 32 taken 1 time.
✗ Branch 33 not taken.
1 ASSERT_EQ(1u, eth.recentWarnings()->getCount());
118 1 }
119