GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/test_gear_detector.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 168 0 168
Functions: 100.0% 22 0 22
Branches: 40.7% 235 0 577
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 #include "pch.h"
2
3 6 float GetGearRatioFor(float revPerKm, float axle, float kph, float rpm) {
4
1/1
✓ Branch 2 taken 6 times.
6 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
5
6 6 engineConfiguration->driveWheelRevPerKm = revPerKm;
7 6 engineConfiguration->finalGearRatio = axle;
8
9
1/1
✓ Branch 1 taken 6 times.
6 Sensor::setMockValue(SensorType::VehicleSpeed, kph);
10
1/1
✓ Branch 1 taken 6 times.
6 Sensor::setMockValue(SensorType::Rpm, rpm);
11
12
1/1
✓ Branch 1 taken 6 times.
6 engine->periodicSlowCallback();
13
14
1/1
✓ Branch 1 taken 6 times.
6 auto& dut = engine->module<GearDetector>().unmock();
15
1/1
✓ Branch 1 taken 6 times.
12 return dut.getGearboxRatio();
16 6 }
17
18 4 TEST(GearDetector, ComputeGearRatio) {
19 // real gears from Volvo racecar
20
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_M3(3.35f, GetGearRatioFor(507, 4.1, 29.45f / 0.6214f, 5500));
21
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_M3(1.99f, GetGearRatioFor(507, 4.1, 49.57f / 0.6214f, 5500));
22
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_M3(1.33f, GetGearRatioFor(507, 4.1, 74.18f / 0.6214f, 5500));
23
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_M3(1.00f, GetGearRatioFor(507, 4.1, 98.65f / 0.6214f, 5500));
24
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_M3(0.72f, GetGearRatioFor(507, 4.1, 137.02f / 0.6214f, 5500));
25
26 // Idling, car stopped, check no div/0
27
3/7
✓ 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.
1 EXPECT_EQ(0, GetGearRatioFor(507, 4.1, 0, 800));
28 1 }
29
30
31 4 TEST(GearDetector, GetRpmInGear) {
32
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
33
34 1 engineConfiguration->driveWheelRevPerKm = 507;
35 1 engineConfiguration->finalGearRatio = 4.10f;
36
37 // real gears from Volvo racecar
38 1 engineConfiguration->totalGearsCount = 5;
39 1 engineConfiguration->gearRatio[0] = 3.35f;
40 1 engineConfiguration->gearRatio[1] = 1.99f;
41 1 engineConfiguration->gearRatio[2] = 1.33f;
42 1 engineConfiguration->gearRatio[3] = 1.00f;
43 1 engineConfiguration->gearRatio[4] = 0.72f;
44
45
1/1
✓ Branch 1 taken 1 time.
1 auto& dut = engine->module<GearDetector>().unmock();
46
47
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::VehicleSpeed, 29.45f / 0.6214f);
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(5500, dut.getRpmInGear(1), 1);
49
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::VehicleSpeed, 49.57f / 0.6214f);
50
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(5500, dut.getRpmInGear(2), 1);
51
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::VehicleSpeed, 74.18f / 0.6214f);
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(5500, dut.getRpmInGear(3), 1);
53
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::VehicleSpeed, 98.65f / 0.6214f);
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(5500, dut.getRpmInGear(4), 1);
55
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::VehicleSpeed, 137.02f / 0.6214f);
56
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(5500, dut.getRpmInGear(5), 1);
57
58 // Test some invalid cases
59
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_FLOAT_EQ(0, dut.getRpmInGear(0));
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_FLOAT_EQ(0, dut.getRpmInGear(10));
61
62 // Zero vehicle speed shouldn't cause a problem
63
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::VehicleSpeed, 0);
64
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_FLOAT_EQ(0, dut.getRpmInGear(0));
65
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_FLOAT_EQ(0, dut.getRpmInGear(1));
66
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_FLOAT_EQ(0, dut.getRpmInGear(5));
67
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_FLOAT_EQ(0, dut.getRpmInGear(10));
68 2 }
69
70 4 TEST(GearDetector, DetermineGearSingleSpeed) {
71
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
72
1/1
✓ Branch 1 taken 1 time.
1 auto& dut = engine->module<GearDetector>().unmock();
73
74 1 engineConfiguration->totalGearsCount = 1;
75 1 engineConfiguration->gearRatio[0] = 2;
76
77
1/1
✓ Branch 1 taken 1 time.
1 dut.onConfigurationChange(nullptr);
78
79 // Super high ratios indicate clutch slip or idling in neutral or something
80
3/7
✓ 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.
1 EXPECT_EQ(0u, dut.determineGearFromRatio(100));
81
3/7
✓ 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.
1 EXPECT_EQ(0u, dut.determineGearFromRatio(4));
82
83 // Check exactly on the gear
84
3/7
✓ 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.
1 EXPECT_EQ(1u, dut.determineGearFromRatio(2));
85
86 // Check near the gear
87
3/7
✓ 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.
1 EXPECT_EQ(1u, dut.determineGearFromRatio(2.1));
88
3/7
✓ 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.
1 EXPECT_EQ(1u, dut.determineGearFromRatio(1.9));
89
90 // Extremely low ratio suggests stopped engine at speed?
91
3/7
✓ 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.
1 EXPECT_EQ(0u, dut.determineGearFromRatio(1.0));
92 2 }
93
94 4 TEST(GearDetector, DetermineGear5Speed) {
95
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
96
1/1
✓ Branch 1 taken 1 time.
1 auto& dut = engine->module<GearDetector>().unmock();
97
98 1 engineConfiguration->totalGearsCount = 5;
99 1 engineConfiguration->gearRatio[0] = 3.35;
100 1 engineConfiguration->gearRatio[1] = 1.99;
101 1 engineConfiguration->gearRatio[2] = 1.33;
102 1 engineConfiguration->gearRatio[3] = 1.00;
103 1 engineConfiguration->gearRatio[4] = 0.72;
104
105
1/1
✓ Branch 1 taken 1 time.
1 dut.onConfigurationChange(nullptr);
106
107 // Super high ratios indicate clutch slip or idling in neutral or something
108
3/7
✓ 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.
1 EXPECT_EQ(0u, dut.determineGearFromRatio(100));
109
3/7
✓ 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.
1 EXPECT_EQ(0u, dut.determineGearFromRatio(6));
110
111 // Check exactly on gears
112
3/7
✓ 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.
1 EXPECT_EQ(1u, dut.determineGearFromRatio(3.35));
113
3/7
✓ 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.
1 EXPECT_EQ(2u, dut.determineGearFromRatio(1.99));
114
3/7
✓ 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.
1 EXPECT_EQ(3u, dut.determineGearFromRatio(1.33));
115
3/7
✓ 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.
1 EXPECT_EQ(4u, dut.determineGearFromRatio(1.00));
116
3/7
✓ 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.
1 EXPECT_EQ(5u, dut.determineGearFromRatio(0.72));
117
118 // Check near each gear
119
3/7
✓ 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.
1 EXPECT_EQ(1u, dut.determineGearFromRatio(3.45));
120
3/7
✓ 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.
1 EXPECT_EQ(1u, dut.determineGearFromRatio(3.25));
121
122
3/7
✓ 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.
1 EXPECT_EQ(2u, dut.determineGearFromRatio(2.2));
123
3/7
✓ 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.
1 EXPECT_EQ(2u, dut.determineGearFromRatio(1.8));
124
125
3/7
✓ 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.
1 EXPECT_EQ(3u, dut.determineGearFromRatio(1.45));
126
3/7
✓ 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.
1 EXPECT_EQ(3u, dut.determineGearFromRatio(1.25));
127
128
3/7
✓ 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.
1 EXPECT_EQ(4u, dut.determineGearFromRatio(1.1));
129
3/7
✓ 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.
1 EXPECT_EQ(4u, dut.determineGearFromRatio(0.9));
130
131
3/7
✓ 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.
1 EXPECT_EQ(5u, dut.determineGearFromRatio(0.8));
132
3/7
✓ 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.
1 EXPECT_EQ(5u, dut.determineGearFromRatio(0.6));
133
134 // Extremely low ratio suggests stopped engine at speed?
135
3/7
✓ 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.
1 EXPECT_EQ(0u, dut.determineGearFromRatio(0.1));
136 2 }
137
138 4 TEST(GearDetector, MiataNb6Speed) {
139
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
140
1/1
✓ Branch 1 taken 1 time.
1 auto& dut = engine->module<GearDetector>().unmock();
141
142 1 engineConfiguration->totalGearsCount = 6;
143 1 engineConfiguration->gearRatio[0] = 3.76;
144 1 engineConfiguration->gearRatio[1] = 2.27;
145 1 engineConfiguration->gearRatio[2] = 1.65;
146 1 engineConfiguration->gearRatio[3] = 1.26;
147 1 engineConfiguration->gearRatio[4] = 1.00;
148 1 engineConfiguration->gearRatio[5] = 0.84;
149 1 engineConfiguration->gearRatio[6] = 0.84;
150 1 engineConfiguration->gearRatio[7] = 0.84;
151
152
1/1
✓ Branch 1 taken 1 time.
1 dut.onConfigurationChange(nullptr);
153
154
3/7
✓ 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.
1 EXPECT_EQ(0u, dut.determineGearFromRatio(5.85));
155
3/7
✓ 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.
1 EXPECT_EQ(1u, dut.determineGearFromRatio(5.51));
156
157 // Check exactly on gears
158
3/7
✓ 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.
1 EXPECT_EQ(1u, dut.determineGearFromRatio(3.76));
159
3/7
✓ 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.
1 EXPECT_EQ(2u, dut.determineGearFromRatio(2.27));
160
3/7
✓ 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.
1 EXPECT_EQ(3u, dut.determineGearFromRatio(1.65));
161
3/7
✓ 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.
1 EXPECT_EQ(4u, dut.determineGearFromRatio(1.26));
162
3/7
✓ 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.
1 EXPECT_EQ(5u, dut.determineGearFromRatio(1.00));
163
3/7
✓ 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.
1 EXPECT_EQ(6u, dut.determineGearFromRatio(0.84));
164 2 }
165
166 4 TEST(GearDetector, DetermineGear8Speed) {
167
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
168
1/1
✓ Branch 1 taken 1 time.
1 auto& dut = engine->module<GearDetector>().unmock();
169
170 // ZF 8HP 70
171 1 engineConfiguration->totalGearsCount = 8;
172 1 engineConfiguration->gearRatio[0] = 4.69;
173 1 engineConfiguration->gearRatio[1] = 3.13;
174 1 engineConfiguration->gearRatio[2] = 2.10;
175 1 engineConfiguration->gearRatio[3] = 1.67;
176 1 engineConfiguration->gearRatio[4] = 1.28;
177 1 engineConfiguration->gearRatio[5] = 1;
178 1 engineConfiguration->gearRatio[6] = 0.84;
179 1 engineConfiguration->gearRatio[7] = 0.67;
180
181
1/1
✓ Branch 1 taken 1 time.
1 dut.onConfigurationChange(nullptr);
182
183 // Super high ratios indicate clutch slip or idling in neutral or something
184
3/7
✓ 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.
1 EXPECT_EQ(0u, dut.determineGearFromRatio(100));
185
3/7
✓ 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.
1 EXPECT_EQ(0u, dut.determineGearFromRatio(8));
186
187 // Check exactly on gears - only test the ends, the middle works
188
3/7
✓ 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.
1 EXPECT_EQ(1u, dut.determineGearFromRatio(4.69));
189
3/7
✓ 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.
1 EXPECT_EQ(2u, dut.determineGearFromRatio(3.13));
190
191
3/7
✓ 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.
1 EXPECT_EQ(7u, dut.determineGearFromRatio(0.84));
192
3/7
✓ 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.
1 EXPECT_EQ(8u, dut.determineGearFromRatio(0.67));
193
194 // Check near each gear - only test the ends, the middle works
195
3/7
✓ 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.
1 EXPECT_EQ(1u, dut.determineGearFromRatio(4.75));
196
3/7
✓ 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.
1 EXPECT_EQ(1u, dut.determineGearFromRatio(4.3));
197
198
3/7
✓ 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.
1 EXPECT_EQ(8u, dut.determineGearFromRatio(0.71));
199
3/7
✓ 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.
1 EXPECT_EQ(8u, dut.determineGearFromRatio(0.6));
200
201 // Extremely low ratio suggests stopped engine at speed?
202
3/7
✓ 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.
1 EXPECT_EQ(0u, dut.determineGearFromRatio(0.1));
203 2 }
204
205 4 TEST(GearDetector, ParameterValidation) {
206
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
207
1/1
✓ Branch 1 taken 1 time.
1 auto& dut = engine->module<GearDetector>().unmock();
208
209 // Defaults should work
210
4/20
✓ Branch 3 taken 1 time.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✗ Branch 29 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 47 not taken.
✗ Branch 50 not taken.
✗ Branch 56 not taken.
✗ Branch 60 not taken.
✗ Branch 63 not taken.
✗ Branch 68 not taken.
✗ Branch 71 not taken.
1 EXPECT_NO_FATAL_ERROR(dut.onConfigurationChange(nullptr));
211
212 // Invalid gear count
213 1 engineConfiguration->totalGearsCount = 25;
214
5/23
✓ Branch 3 taken 1 time.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 22 not taken.
✗ Branch 27 not taken.
✗ Branch 30 not taken.
✓ Branch 37 taken 1 time.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 44 not taken.
✗ Branch 49 not taken.
✗ Branch 52 not taken.
✗ Branch 58 not taken.
✗ Branch 62 not taken.
✗ Branch 65 not taken.
✗ Branch 70 not taken.
✗ Branch 73 not taken.
1 EXPECT_FATAL_ERROR(dut.onConfigurationChange(nullptr));
215
216 // Valid gears
217 1 engineConfiguration->totalGearsCount = 2;
218 1 engineConfiguration->gearRatio[0] = 3;
219 1 engineConfiguration->gearRatio[1] = 2;
220
4/20
✓ Branch 3 taken 1 time.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✗ Branch 29 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 47 not taken.
✗ Branch 50 not taken.
✗ Branch 56 not taken.
✗ Branch 60 not taken.
✗ Branch 63 not taken.
✗ Branch 68 not taken.
✗ Branch 71 not taken.
1 EXPECT_NO_FATAL_ERROR(dut.onConfigurationChange(nullptr));
221
222 // Invalid gear ratio
223 1 engineConfiguration->gearRatio[1] = 0;
224
5/23
✓ Branch 3 taken 1 time.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 22 not taken.
✗ Branch 27 not taken.
✗ Branch 30 not taken.
✓ Branch 37 taken 1 time.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 44 not taken.
✗ Branch 49 not taken.
✗ Branch 52 not taken.
✗ Branch 58 not taken.
✗ Branch 62 not taken.
✗ Branch 65 not taken.
✗ Branch 70 not taken.
✗ Branch 73 not taken.
1 EXPECT_FATAL_ERROR(dut.onConfigurationChange(nullptr));
225
226 // Out of order gear ratios
227 1 engineConfiguration->gearRatio[0] = 2;
228 1 engineConfiguration->gearRatio[1] = 3;
229
5/23
✓ Branch 3 taken 1 time.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 22 not taken.
✗ Branch 27 not taken.
✗ Branch 30 not taken.
✓ Branch 37 taken 1 time.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 44 not taken.
✗ Branch 49 not taken.
✗ Branch 52 not taken.
✗ Branch 58 not taken.
✗ Branch 62 not taken.
✗ Branch 65 not taken.
✗ Branch 70 not taken.
✗ Branch 73 not taken.
1 EXPECT_FATAL_ERROR(dut.onConfigurationChange(nullptr));
230
231 // No gears at all is a valid configuration
232 1 engineConfiguration->totalGearsCount = 0;
233
4/20
✓ Branch 3 taken 1 time.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 time.
✓ Branch 8 taken 1 time.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 time.
✗ Branch 17 not taken.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✗ Branch 29 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 47 not taken.
✗ Branch 50 not taken.
✗ Branch 56 not taken.
✗ Branch 60 not taken.
✗ Branch 63 not taken.
✗ Branch 68 not taken.
✗ Branch 71 not taken.
1 EXPECT_NO_FATAL_ERROR(dut.onConfigurationChange(nullptr));
234 2 }
235