GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/sensor/func_chain.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 65 0 65
Functions: 100.0% 18 0 18
Branches: 38.2% 63 0 165
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 #include "pch.h"
2
3 #include "func_chain.h"
4 #include "init.h"
5 #include "lua_hooks.h"
6
7 struct AddOne final : public SensorConverter {
8 6 SensorResult convert(float input) const {
9 6 return input + 1;
10 }
11 };
12
13 struct SubOne final : public SensorConverter {
14 2 SensorResult convert(float input) const {
15 2 return input - 1;
16 }
17 };
18
19 struct Doubler final : public SensorConverter {
20 4 SensorResult convert(float input) const {
21 4 return input * 2;
22 }
23 };
24
25 4 TEST(FunctionChain, TestSingle)
26 {
27 1 FuncChain<AddOne> fc;
28
29 {
30
1/1
✓ Branch 2 taken 1 time.
1 auto r = fc.convert(5);
31
1/6
✗ 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.
1 EXPECT_TRUE(r.Valid);
32
2/6
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
1 EXPECT_EQ(r.Value, 6);
33 }
34
35 {
36
1/1
✓ Branch 2 taken 1 time.
1 auto r = fc.convert(10);
37
1/6
✗ 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.
1 EXPECT_TRUE(r.Valid);
38
2/6
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
1 EXPECT_EQ(r.Value, 11);
39 }
40 1 }
41
42 4 TEST(FunctionChain, TestDouble)
43 {
44 // This computes fc(x) = (x + 1) * 2
45 1 FuncChain<AddOne, Doubler> fc;
46
47 {
48
1/1
✓ Branch 2 taken 1 time.
1 auto r = fc.convert(5);
49
1/6
✗ 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.
1 EXPECT_TRUE(r.Valid);
50
2/6
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
1 EXPECT_EQ(r.Value, 12);
51 }
52
53 {
54
1/1
✓ Branch 2 taken 1 time.
1 auto r = fc.convert(10);
55
1/6
✗ 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.
1 EXPECT_TRUE(r.Valid);
56
2/6
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
1 EXPECT_EQ(r.Value, 22);
57 }
58 1 }
59
60 4 TEST(FunctionChain, TestTriple)
61 {
62 // This computes fc(x) = ((x + 1) * 2) - 1
63 1 FuncChain<AddOne, Doubler, SubOne> fc;
64
65 {
66
1/1
✓ Branch 2 taken 1 time.
1 auto r = fc.convert(5);
67
1/6
✗ 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.
1 EXPECT_TRUE(r.Valid);
68
2/6
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
1 EXPECT_EQ(r.Value, 11);
69 }
70
71 {
72
1/1
✓ Branch 2 taken 1 time.
1 auto r = fc.convert(10);
73
1/6
✗ 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.
1 EXPECT_TRUE(r.Valid);
74
2/6
✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
1 EXPECT_EQ(r.Value, 21);
75 }
76 1 }
77
78 4 TEST(FunctionChain, TestGet)
79 {
80 // No logic here - the test is that it compiles
81 1 FuncChain<AddOne, Doubler, SubOne> fc;
82
83
1/1
✓ Branch 1 taken 1 time.
1 fc.get<AddOne>();
84
1/1
✓ Branch 1 taken 1 time.
1 fc.get<Doubler>();
85
1/1
✓ Branch 1 taken 1 time.
1 fc.get<SubOne>();
86
87
4/10
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 36 taken 1 time.
✗ Branch 37 not taken.
1 ASSERT_TRUE(fc.getPtr<AddOne>() == &fc.get<AddOne>());
88
4/10
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 36 taken 1 time.
✗ Branch 37 not taken.
1 ASSERT_TRUE(fc.getPtr<Doubler>() == &fc.get<Doubler>());
89
4/10
✓ Branch 3 taken 1 time.
✓ Branch 6 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 36 taken 1 time.
✗ Branch 37 not taken.
1 ASSERT_TRUE(fc.getPtr<SubOne>() == &fc.get<SubOne>());
90 }
91
92 4 TEST(Sensor, OverrideValue) {
93
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::HARLEY);
94 // huh? i do not get this EXPECT_FALSE(Sensor::get(SensorType::Rpm).Valid);
95
1/1
✓ Branch 1 taken 1 time.
1 initOverrideSensors();
96
97
1/1
✓ Branch 1 taken 1 time.
1 Sensor::setMockValue(SensorType::Rpm, 1000);
98
2/7
✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
1 EXPECT_TRUE(Sensor::get(SensorType::Rpm).Valid);
99
2/7
✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
1 EXPECT_TRUE(Sensor::get(SensorType::DashOverrideRpm).Valid);
100
101
4/9
✓ 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.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_DOUBLE_EQ(1000, Sensor::get(SensorType::Rpm).Value);
102
4/9
✓ 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.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_DOUBLE_EQ(1000, Sensor::get(SensorType::DashOverrideRpm).Value);
103
104
1/1
✓ Branch 1 taken 1 time.
1 LuaOverrideSensor * sensor = (LuaOverrideSensor*)Sensor::getSensorOfType(SensorType::DashOverrideRpm);
105 1 sensor->setOverrideValue(3);
106
4/9
✓ 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.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_DOUBLE_EQ(3, Sensor::get(SensorType::DashOverrideRpm).Value);
107 1 sensor->reset();
108
4/9
✓ 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.
✓ Branch 27 taken 1 time.
✗ Branch 28 not taken.
1 ASSERT_DOUBLE_EQ(1000, Sensor::get(SensorType::DashOverrideRpm).Value);
109 1 }
110