GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/actuators/test_fan_control.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 56 0 56
Functions: 100.0% 4 0 4
Branches: 55.2% 69 0 125
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 #include "pch.h"
2
3 #include "fan_control.h"
4
5 14 static void updateFans() {
6 14 engine->module<FanControl1>()->onSlowCallback();
7 14 }
8
9 4 TEST(Actuators, Fan) {
10 struct MockAc : public AcController {
11 bool acState = false;
12
13 bool isAcEnabled() const override {
14 return acState;
15 }
16 };
17
18
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
19 1 MockAc mockAc;
20
1/1
✓ Branch 1 taken 1 time.
1 engine->module<AcController>().set(&mockAc);
21
22 1 engineConfiguration->fanOnTemperature = 90;
23 1 engineConfiguration->fanOffTemperature = 80;
24 1 engineConfiguration->enableFan1WithAc = false;
25
26 // Cold, fan should be off
27
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Clt, 75);
28
1/1
✓ Branch 1 taken 1 time.
1 updateFans();
29
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(false, enginePins.fanRelay.getLogicValue());
30
31 // Between thresholds, should still be off
32
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Clt, 85);
33
1/1
✓ Branch 1 taken 1 time.
1 updateFans();
34
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(false, enginePins.fanRelay.getLogicValue());
35
36 // Hot, fan should turn on
37
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Clt, 95);
38
1/1
✓ Branch 1 taken 1 time.
1 updateFans();
39
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(true, enginePins.fanRelay.getLogicValue());
40
41 // Between thresholds, should stay on
42
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Clt, 85);
43
1/1
✓ Branch 1 taken 1 time.
1 updateFans();
44
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(true, enginePins.fanRelay.getLogicValue());
45
46 // Below threshold, should turn off
47
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Clt, 75);
48
1/1
✓ Branch 1 taken 1 time.
1 updateFans();
49
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(false, enginePins.fanRelay.getLogicValue());
50
51 // Break the CLT sensor - fan turns on
52
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setInvalidMockValue(SensorType::Clt);
53
1/1
✓ Branch 1 taken 1 time.
1 updateFans();
54
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(true, enginePins.fanRelay.getLogicValue());
55
56 // CLT sensor back to normal, fan turns off
57
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Clt, 75);
58
1/1
✓ Branch 1 taken 1 time.
1 updateFans();
59
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(false, enginePins.fanRelay.getLogicValue());
60
61 1 engineConfiguration->enableFan1WithAc = true;
62 // Now AC is on, fan should turn on!
63 1 mockAc.acState = true;
64
1/1
✓ Branch 1 taken 1 time.
1 updateFans();
65
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(true, enginePins.fanRelay.getLogicValue());
66
67 // Turn off AC, fan should turn off too.
68 1 mockAc.acState = false;
69
1/1
✓ Branch 1 taken 1 time.
1 updateFans();
70
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(false, enginePins.fanRelay.getLogicValue());
71
72 // Back to hot, fan should turn on
73
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Clt, 95);
74
1/1
✓ Branch 1 taken 1 time.
1 updateFans();
75
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(true, enginePins.fanRelay.getLogicValue());
76
77 // Engine starts cranking, fan should turn off
78
1/1
✓ Branch 1 taken 1 time.
1 engine->rpmCalculator.setRpmValue(100);
79
1/1
✓ Branch 1 taken 1 time.
1 updateFans();
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(false, enginePins.fanRelay.getLogicValue());
81
82 // Engine running, fan should turn back on
83
1/1
✓ Branch 1 taken 1 time.
1 engine->rpmCalculator.setRpmValue(1000);
84
1/1
✓ Branch 1 taken 1 time.
1 updateFans();
85
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(true, enginePins.fanRelay.getLogicValue());
86
87 // Stop the engine, fan should stay on
88
1/1
✓ Branch 1 taken 1 time.
1 engine->rpmCalculator.setRpmValue(0);
89
1/1
✓ Branch 1 taken 1 time.
1 updateFans();
90
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(true, enginePins.fanRelay.getLogicValue());
91
92 // Set configuration to inhibit fan while engine is stopped, fan should stop
93 1 engineConfiguration->disableFan1WhenStopped = true;
94
1/1
✓ Branch 1 taken 1 time.
1 updateFans();
95
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(false, enginePins.fanRelay.getLogicValue());
96 2 }
97