GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/controllers/modules/vvl_controller/vvl_controller_rpm_condition.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 24 0 24
Functions: 100.0% 7 0 7
Branches: 73.7% 14 0 19
Decisions: 100.0% 2 - 2

Line Branch Decision Exec Source
1 /*
2 * @file vvl_controller_rpm_condition.cpp
3 *
4 * @date: ago 26, 2025
5 * @author FDSoftware, kifir
6 */
7
8 #include "pch.h"
9
10 #include "engine_configuration_defaults.h"
11
12 #include "util/test_base.h"
13
14 static constexpr uint16_t TEST_ACTIVATION_RPM = 239;
15 static constexpr uint16_t TEST_DEACTIVATION_RPM = 932;
16 static constexpr uint16_t TEST_DEACTIVATION_RPM_WINDOW = 17;
17 static constexpr uint16_t TEST_DEACTIVATION_RPM_WINDOW_BEGIN
18 = TEST_DEACTIVATION_RPM - TEST_DEACTIVATION_RPM_WINDOW;
19
20 static constexpr float BEFORE_TEST_ACTIVATION_RPM = TEST_ACTIVATION_RPM - EPS5D;
21 static constexpr float BEFORE_TEST_DEACTIVATION_RPM_WINDOW_BEGIN = TEST_DEACTIVATION_RPM_WINDOW_BEGIN - EPS4D;
22 static constexpr float BEFORE_TEST_DEACTIVATION_RPM = TEST_DEACTIVATION_RPM - EPS4D;
23
24 static constexpr uint16_t DEFAULT_ACTIVATION_RPM = engine_configuration_defaults::NITROUS_ACTIVATION_RPM;
25 static constexpr uint16_t DEFAULT_DEACTIVATION_RPM = engine_configuration_defaults::NITROUS_DEACTIVATION_RPM;
26 static constexpr uint16_t DEFAULT_DEACTIVATION_RPM_WINDOW =
27 engine_configuration_defaults::NITROUS_DEACTIVATION_RPM_WINDOW;
28 static constexpr uint16_t DEFAULT_DEACTIVATION_RPM_WINDOW_BEGIN =
29 DEFAULT_DEACTIVATION_RPM - DEFAULT_DEACTIVATION_RPM_WINDOW;
30
31 static constexpr float BEFORE_DEFAULT_ACTIVATION_RPM = DEFAULT_ACTIVATION_RPM - EPS3D;
32 static constexpr float BEFORE_DEFAULT_DEACTIVATION_RPM_WINDOW_BEGIN =
33 DEFAULT_DEACTIVATION_RPM_WINDOW_BEGIN - EPS3D;
34 static constexpr float BEFORE_DEFAULT_DEACTIVATION_RPM = DEFAULT_DEACTIVATION_RPM - EPS3D;
35
36 namespace {
37 struct RpmConditionTestData {
38 const std::optional<float> rpm;
39 const bool expectedRpmCondition;
40 const char* const context;
41 };
42
43 2 void checkRpmCondition(const std::vector<RpmConditionTestData>& testData) {
44
2/2
✓ Branch 7 taken 23 times.
✓ Branch 8 taken 2 times.
2/2
✓ Decision 'true' taken 23 times.
✓ Decision 'false' taken 2 times.
25 for (const RpmConditionTestData& item: testData) {
45
1/1
✓ Branch 3 taken 23 times.
23 engine->rpmCalculator.setRpmValue(item.rpm.value_or(0));
46
2/2
✓ Branch 1 taken 23 times.
✓ Branch 5 taken 23 times.
23 engine->module<VvlController>().unmock().onSlowCallback();
47
3/7
✓ Branch 3 taken 23 times.
✓ Branch 7 taken 23 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 23 times.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
23 EXPECT_EQ(engine->module<VvlController>().unmock().isVvlRpmCondition, item.expectedRpmCondition)
48
0/1
✗ Branch 1 not taken.
23 << item.context;
49 }
50 2 }
51
52 4 TEST(VvlRpmConditionTest, checkDefaultWithDisabledVvlControl) {
53
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
54 1 engineConfiguration->vvlControlEnabled = false;
55
56
2/2
✓ Branch 4 taken 1 time.
✓ Branch 7 taken 1 time.
3 checkRpmCondition({
57 { {0}, false, "rpm = 0" },
58 { { BEFORE_TEST_ACTIVATION_RPM }, false, "rpm = BEFORE_TEST_ACTIVATION_RPM" },
59 { { TEST_ACTIVATION_RPM }, false, "rpm = TEST_ACTIVATION_RPM" },
60 { { BEFORE_TEST_ACTIVATION_RPM }, false, "rpm = BEFORE_TEST_ACTIVATION_RPM" },
61 { { TEST_DEACTIVATION_RPM }, false, "rpm = TEST_DEACTIVATION_RPM" },
62 { { TEST_DEACTIVATION_RPM + 1 }, false, "rpm = TEST_DEACTIVATION_RPM + 1" },
63 { { DEFAULT_ACTIVATION_RPM }, false, "rpm = DEFAULT_ACTIVATION_RPM" },
64 { { DEFAULT_DEACTIVATION_RPM }, false, "rpm = DEFAULT_DEACTIVATION_RPM" },
65 { { TEST_DEACTIVATION_RPM_WINDOW_BEGIN }, false, "rpm = TEST_DEACTIVATION_RPM_WINDOW_BEGIN" },
66 { { BEFORE_TEST_DEACTIVATION_RPM_WINDOW_BEGIN }, false, "rpm = BEFORE_TEST_DEACTIVATION_RPM_WINDOW_BEGIN" },
67 { { TEST_DEACTIVATION_RPM_WINDOW_BEGIN }, false, "rpm = TEST_DEACTIVATION_RPM_WINDOW_BEGIN (again)" },
68 { { BEFORE_TEST_DEACTIVATION_RPM }, false, "rpm = BEFORE_TEST_DEACTIVATION_RPM (again)" },
69 { { TEST_DEACTIVATION_RPM }, false, "rpm = TEST_DEACTIVATION_RPM (again)" },
70 });
71 2 }
72
73 4 TEST(VvlRpmConditionTest, checkActivationAndDeactivation) {
74
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
75 1 engineConfiguration->vvlControlEnabled = true;
76
77 1 engineConfiguration->vvlController.activationRpm = TEST_ACTIVATION_RPM;
78 1 engineConfiguration->vvlController.deactivationRpm = TEST_DEACTIVATION_RPM;
79 1 engineConfiguration->vvlController.deactivationRpmWindow = TEST_DEACTIVATION_RPM_WINDOW;
80
81
2/2
✓ Branch 4 taken 1 time.
✓ Branch 7 taken 1 time.
3 checkRpmCondition({
82 { { 0 }, false, "rpm = 0" },
83 { { BEFORE_TEST_ACTIVATION_RPM }, false, "rpm = BEFORE_TEST_ACTIVATION_RPM" },
84 { { TEST_ACTIVATION_RPM }, true, "rpm = TEST_ACTIVATION_RPM" },
85 { { BEFORE_TEST_DEACTIVATION_RPM }, true, "rpm = BEFORE_TEST_DEACTIVATION_RPM" },
86 { { TEST_DEACTIVATION_RPM }, false, "rpm = TEST_DEACTIVATION_RPM" },
87 {
88 { TEST_DEACTIVATION_RPM_WINDOW_BEGIN },
89 false,
90 "rpm = TEST_DEACTIVATION_RPM_WINDOW_BEGIN (still in window)"
91 },
92 { { BEFORE_TEST_DEACTIVATION_RPM_WINDOW_BEGIN }, true, "rpm = BEFORE_TEST_DEACTIVATION_RPM_WINDOW_BEGIN" },
93 {
94 { TEST_DEACTIVATION_RPM_WINDOW_BEGIN },
95 true,
96 "rpm = TEST_DEACTIVATION_RPM_WINDOW_BEGIN (returning to the window)"
97 },
98 { { BEFORE_TEST_DEACTIVATION_RPM }, true, "rpm = BEFORE_TEST_DEACTIVATION_RPM (again)" },
99 { { TEST_DEACTIVATION_RPM }, false, "rpm = TEST_DEACTIVATION_RPM (again)" },
100 });
101
102 2 }
103 }
104