GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/lua/test_lua_hooks.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 97 0 97
Functions: 100.0% 39 0 39
Branches: 32.3% 95 0 294
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 #include "pch.h"
2 #include "rusefi_lua.h"
3
4
5 4 TEST(LuaHooks, TestCrc8) {
6 1 const char* realHDdata = R"(
7
8 function testFunc()
9 return crc8_j1850({0x13, 0x57, 0x13, 0x45, 0x00, 0xe8, 0x5c }, 7)
10 end
11
12 )";
13
3/7
✓ Branch 5 taken 1 time.
✓ Branch 9 taken 1 time.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 time.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
1 EXPECT_EQ(testLuaReturnsNumberOrNil(realHDdata).value_or(0), 0x86);
14
15 1 const char* crc8scripts = R"(
16
17 function testFunc()
18 return crc8_j1850({0x31,0x32,0x32 }, 2)
19 end
20
21 )";
22
3/7
✓ Branch 5 taken 1 time.
✓ Branch 9 taken 1 time.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 time.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
1 EXPECT_EQ(testLuaReturnsNumberOrNil(crc8scripts).value_or(0), 0x43);
23 1 }
24
25 4 TEST(LuaHooks, TestGetCalibration) {
26
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
27 1 const char* sourceCode = R"(
28
29 function testFunc()
30 return getCalibration("cranking.rpm")
31 end
32
33 )";
34
3/7
✓ Branch 4 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(testLuaReturnsNumber(sourceCode), 550);
35 2 }
36
37 4 TEST(LuaHooks, TestSetCalibration) {
38
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
39 1 const char* sourceCode = R"(
40
41 function testFunc()
42 setCalibration("cranking.rpm", 900, false)
43 return getCalibration("cranking.rpm")
44 end
45
46 )";
47
3/7
✓ Branch 4 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(testLuaReturnsNumber(sourceCode), 900);
48 2 }
49
50
51 4 TEST(LuaHooks, TestGetSensorByIndex) {
52 1 const char* getSensorTestByIndex = R"(
53
54 function testFunc()
55 return getSensorByIndex(10)
56 end
57
58 )";
59
60 // Test failed sensor, returns nil
61 1 Sensor::resetMockValue(static_cast<SensorType>(10));
62
3/7
✓ Branch 3 taken 1 time.
✓ Branch 6 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(testLuaReturnsNumberOrNil(getSensorTestByIndex), unexpected);
63
64 // Now test with a value, returns value
65 1 Sensor::setMockValue(static_cast<SensorType>(10), 33);
66
3/7
✓ Branch 5 taken 1 time.
✓ Branch 9 taken 1 time.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 time.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
1 EXPECT_EQ(testLuaReturnsNumberOrNil(getSensorTestByIndex).value_or(0), 33);
67 1 }
68
69
70 4 TEST(LuaHooks, TestGetSensorByName) {
71 1 const char* getSensorTestByName = R"(
72
73 function testFunc()
74 return getSensor("CLT")
75 end
76
77 )";
78
79 // Test failed sensor, returns nil
80 1 Sensor::resetMockValue(SensorType::Clt);
81
3/7
✓ Branch 3 taken 1 time.
✓ Branch 6 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(testLuaReturnsNumberOrNil(getSensorTestByName), unexpected);
82
83 // Now test with a value, returns value
84 1 Sensor::setMockValue(SensorType::Clt, 33);
85
3/7
✓ Branch 5 taken 1 time.
✓ Branch 9 taken 1 time.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 time.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
1 EXPECT_EQ(testLuaReturnsNumberOrNil(getSensorTestByName).value_or(0), 33);
86 1 }
87
88 4 TEST(LuaHooks, Table3d) {
89 1 const char* tableTest = R"(
90 function testFunc()
91 return table3d(2, 1000, 40)
92 end
93 )";
94
95
1/1
✓ Branch 2 taken 1 time.
1 EngineTestHelper eth(engine_type_e::TEST_ENGINE);
96
97 1 setTable(config->scriptTable2, (uint8_t)33);
98
3/7
✓ Branch 4 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(testLuaReturnsNumber(tableTest), 33);
99
100 1 setTable(config->scriptTable2, (uint8_t)14);
101
3/7
✓ Branch 4 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(testLuaReturnsNumber(tableTest), 14);
102 2 }
103
104 4 TEST(LuaHooks, CanTxChannel) {
105 // channel 1 valid
106
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 16 not taken.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 41 not taken.
✗ Branch 46 not taken.
✗ Branch 49 not taken.
✗ Branch 55 not taken.
✗ Branch 59 not taken.
✗ Branch 62 not taken.
✗ Branch 67 not taken.
✗ Branch 70 not taken.
1 EXPECT_NO_THROW(testLuaExecString("txCan(1, 0, 0, {0})"));
107
108 // channel 0 invalid
109
4/11
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 time.
✓ Branch 6 taken 1 time.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_ANY_THROW(testLuaExecString("txCan(0, 0, 0, {0})"));
110 1 }
111
112 4 TEST(LuaHooks, CanTxId) {
113 // std ID ok
114
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 16 not taken.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 41 not taken.
✗ Branch 46 not taken.
✗ Branch 49 not taken.
✗ Branch 55 not taken.
✗ Branch 59 not taken.
✗ Branch 62 not taken.
✗ Branch 67 not taken.
✗ Branch 70 not taken.
1 EXPECT_NO_THROW(testLuaExecString("txCan(1, 2047, 0, {0})"));
115 // std ID too high
116
4/11
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 time.
✓ Branch 6 taken 1 time.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_ANY_THROW(testLuaExecString("txCan(1, 2048, 0, {0})"));
117
118 // ext ID ok
119
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 16 not taken.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 41 not taken.
✗ Branch 46 not taken.
✗ Branch 49 not taken.
✗ Branch 55 not taken.
✗ Branch 59 not taken.
✗ Branch 62 not taken.
✗ Branch 67 not taken.
✗ Branch 70 not taken.
1 EXPECT_NO_THROW(testLuaExecString("txCan(1, 536870911, 1, {0})"));
120 // ext ID too high
121
4/11
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 time.
✓ Branch 6 taken 1 time.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_ANY_THROW(testLuaExecString("txCan(1, 536870912, 1, {0})"));
122 1 }
123
124 4 TEST(LuaHooks, CanTxDataLength) {
125 // valid: DLC = 0
126
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 16 not taken.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 41 not taken.
✗ Branch 46 not taken.
✗ Branch 49 not taken.
✗ Branch 55 not taken.
✗ Branch 59 not taken.
✗ Branch 62 not taken.
✗ Branch 67 not taken.
✗ Branch 70 not taken.
1 EXPECT_NO_THROW(testLuaExecString("txCan(1, 0, 0, {})"));
127 // valid: DLC = 1
128
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 16 not taken.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 41 not taken.
✗ Branch 46 not taken.
✗ Branch 49 not taken.
✗ Branch 55 not taken.
✗ Branch 59 not taken.
✗ Branch 62 not taken.
✗ Branch 67 not taken.
✗ Branch 70 not taken.
1 EXPECT_NO_THROW(testLuaExecString("txCan(1, 0, 0, {0})"));
129 // valid: DLC = 8
130
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 16 not taken.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✗ Branch 28 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 41 not taken.
✗ Branch 46 not taken.
✗ Branch 49 not taken.
✗ Branch 55 not taken.
✗ Branch 59 not taken.
✗ Branch 62 not taken.
✗ Branch 67 not taken.
✗ Branch 70 not taken.
1 EXPECT_NO_THROW(testLuaExecString("txCan(1, 0, 0, {1, 2, 3, 4, 5, 6, 7, 8})"));
131
132 // invalid: DLC = 9
133
4/11
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 time.
✓ Branch 6 taken 1 time.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_ANY_THROW(testLuaExecString("txCan(1, 0, 0, {1, 2, 3, 4, 5, 6, 7, 8, 9})"));
134
135 // invalid: is a table, but contains a not-number
136
4/11
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 time.
✓ Branch 6 taken 1 time.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_ANY_THROW(testLuaExecString("txCan(1, 0, 0, {1, 2, 3, 'hello', 5, 6})"));
137
138 // invalid: not a table
139
4/11
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 time.
✓ Branch 6 taken 1 time.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
1 EXPECT_ANY_THROW(testLuaExecString("txCan(1, 0, 0, 26)"));
140 1 }
141
142 4 TEST(LuaHooks, LuaInterpolate) {
143
3/7
✓ Branch 4 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(testLuaReturnsNumber(R"(
144 function testFunc()
145 return interpolate(1, 10, 5, 50, 3)
146 end
147 1 )"), 30);
148 1 }
149
150 4 TEST(LuaHooks, TestLuaTimer) {
151
3/7
✓ Branch 4 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(testLuaReturnsNumber(R"(
152 function testFunc()
153 local a = Timer.new()
154 a:reset()
155 return a:getElapsedSeconds()
156 end
157 1 )"), 0);
158 1 }
159
160 static const char* sensorTest = R"(
161 function testFunc()
162 local sens = Sensor.new("CLT")
163
164 -- Check valid sensor
165 sens:set(33)
166 if getSensor("CLT") ~= 33 then
167 return 1
168 end
169
170 -- Check invalidation
171 sens:invalidate()
172 if getSensor("CLT") then
173 return 2
174 end
175
176 return 0
177 end
178 )";
179
180 4 TEST(LuaHooks, LuaSensor) {
181
3/7
✓ Branch 4 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(testLuaReturnsNumber(sensorTest), 0);
182
183 // Ensure that the sensor got unregistered on teardown of the Lua interpreter
184
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_FALSE(Sensor::hasSensor(SensorType::Clt));
185 1 }
186
187 static const char* pidTest = R"(
188 function testFunc()
189 local pid = Pid.new(0.5, 0, 0, -10, 10)
190
191 -- delta is -4, output -2
192 if pid:get(3, 7) ~= -2 then
193 return 1
194 end
195
196 -- delta is 6, output 3
197 if pid:get(4, -2) ~= 3 then
198 return 2
199 end
200
201 -- test clamping
202 if pid:get(0, 100) ~= -10 then
203 return 3
204 end
205
206 if pid:get(0, -100) ~= 10 then
207 return 4
208 end
209
210 return 0
211 end
212 )";
213
214 4 TEST(LuaHooks, LuaPid) {
215
3/7
✓ Branch 4 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(testLuaReturnsNumber(pidTest), 0);
216 1 }
217