GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/lua/test_lua_vag.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 136 0 136
Functions: 100.0% 66 0 66
Branches: 42.9% 72 0 168
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 #include "pch.h"
2 #include "rusefi_lua.h"
3 #include "lua_lib.h"
4
5 4 TEST(LuaVag, Checksum) {
6 1 const char* realdata = VAG_CHECKSUM R"(
7
8 function testFunc()
9 data = { 0xE0, 0x20, 0x20, 0x7E, 0xFE, 0xFF, 0xFF, 0x60 }
10 return xorChecksum(data, 8)
11 end
12 )";
13
14
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(realdata).value_or(0), 0x60);
15 1 }
16
17 // LSB (Least Significant Byte comes first) "Intel"
18 4 TEST(LuaVag, packMotor1) {
19 1 const char* realdata = PRINT_ARRAY ARRAY_EQUALS SET_TWO_BYTES_LSB R"(
20
21 function testFunc()
22 engineTorque = 15.21
23 rpm = 1207.1
24 innerTorqWithoutExt = 21.6
25 tps = 31.6
26 torqueLoss = 9.75
27 requestedTorque = 21.84
28
29 canMotor1 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
30
31 canMotor1[2] = engineTorque / 0.39
32 setTwoBytesLsb(canMotor1, 2, rpm / 0.25)
33 canMotor1[5] = innerTorqWithoutExt / 0.4
34 canMotor1[6] = tps / 0.4
35 canMotor1[7] = torqueLoss / 0.39
36 canMotor1[8] = requestedTorque / 0.39
37
38 print(arrayToString(canMotor1))
39
40 expected = { 0x00, 0x27, 0xDC, 0x12, 0x36, 0x4F, 0x19, 0x38 }
41 return equals(canMotor1, expected)
42 end
43 )";
44
45
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(realdata).value_or(0), 0);
46 1 }
47
48 #define realMotor1Packet "\ndata = { 0x00, 0x27, 0x8A, 0x1A, 0x36, 0x4F, 0x19, 0x38}\n "
49
50 4 TEST(LuaVag, unpackMotor1_engine_torq) {
51 1 const char* script = GET_BIT_RANGE_LSB realMotor1Packet R"(
52 function testFunc()
53 engineTorque = getBitRange(data, 8, 8) * 0.39
54 return engineTorque
55 end
56 )";
57
58
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 15.21);
59 1 }
60
61 4 TEST(LuaVag, unpackMotor1_rpm) {
62 1 const char* realdata = GET_BIT_RANGE_LSB realMotor1Packet R"(
63 function testFunc()
64 rpm = getBitRange(data, 16, 16) * 0.25
65 return rpm
66 end
67 )";
68
69
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(realdata).value_or(0), 1698.5);
70 1 }
71
72 4 TEST(LuaVag, unpackMotor1_inner_torq) {
73 1 const char* realdata = GET_BIT_RANGE_LSB realMotor1Packet R"(
74 function testFunc()
75 innerTorqWithoutExt = getBitRange(data, 32, 8) * 0.4
76 return innerTorqWithoutExt
77 end
78 )";
79
80
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(realdata).value_or(0), 21.6);
81 1 }
82
83 4 TEST(LuaVag, unpackMotor1_tps) {
84 1 const char* realdata = GET_BIT_RANGE_LSB realMotor1Packet R"(
85 function testFunc()
86 tps = getBitRange(data, 40, 8) * 0.4
87 return tps
88 end
89 )";
90
91
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(realdata).value_or(0), 31.6);
92 1 }
93
94 4 TEST(LuaVag, unpackMotor1_torq_loss) {
95 1 const char* realdata = GET_BIT_RANGE_LSB realMotor1Packet R"(
96 function testFunc()
97 torqueLoss = getBitRange(data, 48, 8) * 0.39
98 return torqueLoss
99 end
100 )";
101
102
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(realdata).value_or(0), 9.75);
103 1 }
104
105
106 4 TEST(LuaVag, unpackMotor1_torq_req) {
107 1 const char* realdata = GET_BIT_RANGE_LSB realMotor1Packet R"(
108 function testFunc()
109 requestedTorque = getBitRange(data, 56, 8) * 0.39
110 return requestedTorque
111 end
112 )";
113
114
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(realdata).value_or(0), 21.84);
115 1 }
116
117 #define realMotor3Packet "\ndata = { 0x00, 0x62, 0xFA, 0xDA, 0x22, 0x00, 0x00, 0xFA}\n "
118
119 4 TEST(LuaVag, packMotor3) {
120 1 const char* script = SET_BIT_RANGE_LSB PRINT_ARRAY ARRAY_EQUALS SET_TWO_BYTES_LSB R"(
121
122 function testFunc()
123 tps = 100
124 iat = 25.5
125 desired_wheel_torque = 284.7
126
127 canMotor3 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
128
129 canMotor3[2] = (iat + 48) / 0.75
130 canMotor3[3] = tps / 0.4
131 canMotor3[5] = 0x20
132 setBitRange(canMotor3, 24, 12, math.floor(desired_wheel_torque / 0.39))
133 canMotor3[8] = tps / 0.4
134
135 print(arrayToString(canMotor3))
136
137 expected = { 0x00, 0x62, 0xFA, 0xDA, 0x22, 0x00, 0x00, 0xFA }
138 return equals(canMotor3, expected)
139 end
140 )";
141
142
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 0);
143 1 }
144
145
146 4 TEST(LuaVag, unpackMotor3_tps) {
147 1 const char* script = GET_BIT_RANGE_LSB realMotor3Packet R"(
148 function testFunc()
149 tps = getBitRange(data, 56, 8) * 0.40
150 return tps
151 end
152 )";
153
154
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 100);
155 1 }
156
157 4 TEST(LuaVag, unpackMotor3_pps) {
158 1 const char* script = GET_BIT_RANGE_LSB realMotor3Packet R"(
159 function testFunc()
160 pps = getBitRange(data, 16, 8) * 0.40
161 return pps
162 end
163 )";
164
165
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 100);
166 1 }
167
168 4 TEST(LuaVag, setBitRange) {
169 {
170 1 const char* script = PRINT_ARRAY ARRAY_EQUALS SET_BIT_RANGE_LSB R"(
171
172 function testFunc()
173 data = { 0x34, 0x56, 0x00 }
174 setBitRange(data, 4, 8, 0xAB)
175
176 print(arrayToString(data))
177
178 expected = { 0xB4, 0x5A, 0x00 }
179 return equals(data, expected)
180 end
181 )";
182
183
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 0);
184 }
185
186 {
187 1 const char* script = PRINT_ARRAY ARRAY_EQUALS SET_BIT_RANGE_LSB R"(
188
189 function testFunc()
190 data = { 0x00, 0x00, 0x00 }
191 setBitRange(data, 5, 9, 0x1FF)
192
193 print(arrayToString(data))
194
195 expected = { 0xE0, 0x3F, 0x00 }
196 return equals(data, expected)
197 end
198 )";
199
200
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 0);
201 }
202
203
204 {
205 1 const char* script = PRINT_ARRAY ARRAY_EQUALS SET_BIT_RANGE_LSB R"(
206
207 function testFunc()
208 data = { 0xFF, 0xFF, 0x00 }
209 setBitRange(data, 5, 9, 0x0)
210
211 print(arrayToString(data))
212
213 expected = { 0x1F, 0xC0, 0x00 }
214 return equals(data, expected)
215 end
216 )";
217
218
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 0);
219 }
220
221 1 }
222
223 4 TEST(LuaVag, unpackMotor3_iat) {
224 1 const char* script = GET_BIT_RANGE_LSB realMotor3Packet R"(
225 function testFunc()
226 iat = getBitRange(data, 8, 8) * 0.75 - 48
227 return iat
228 end
229 )";
230
231
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 25.5);
232 1 }
233
234 4 TEST(Vag, unpackMotor3_desired_wheel_torque) {
235 1 uint8_t data[] = { 0x00, 0x62, 0xFA, 0xDA, 0x22, 0x00, 0x00, 0xFA};
236
237
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(getBitRangeLsb(data, 24, 12) * 0.39, 284.7);
238 1 }
239
240 4 TEST(LuaVag, unpackMotor3_desired_wheel_torque) {
241 1 const char* script = GET_BIT_RANGE_LSB realMotor3Packet R"(
242 function testFunc()
243 desired_wheel_torque = getBitRange(data, 24, 12) * 0.39
244 return desired_wheel_torque
245 end
246 )";
247
248
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 284.7);
249 1 }
250
251 #define realMotor6Packet "\ndata = { 0x3D, 0x54, 0x69, 0x7E, 0xFE, 0xFF, 0xFF, 0x80}\n "
252
253 4 TEST(LuaVag, unpackMotor6_actual_torq) {
254 1 const char* script = GET_BIT_RANGE_LSB realMotor6Packet R"(
255 function testFunc()
256 actualTorque = getBitRange(data, 16, 8) * 0.39
257 return actualTorque
258 end
259 )";
260
261
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 40.95);
262 1 }
263
264 4 TEST(LuaVag, unpackMotor6_target_torq) {
265 1 const char* script = GET_BIT_RANGE_LSB realMotor6Packet R"(
266 function testFunc()
267 targetTorque = getBitRange(data, 8, 8) * 0.39
268 return targetTorque
269 end
270 )";
271
272
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 32.76);
273 1 }
274
275 4 TEST(LuaVag, unpackMotor6_feedback) {
276 1 const char* script = GET_BIT_RANGE_LSB realMotor6Packet R"(
277 function testFunc()
278 feedbackGearbox = getBitRange(data, 40, 8) * 0.39
279 return feedbackGearbox
280 end
281 )";
282
283
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 99.45);
284 1 }
285
286 4 TEST(LuaVag, packMotor6) {
287 1 const char* script = PRINT_ARRAY ARRAY_EQUALS VAG_CHECKSUM R"(
288
289 function testFunc()
290 actualTorque = 40.95
291 targetTorque = 32.76
292 feedbackGearbox = 99.45
293
294 motor6Data = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
295
296 motor6Data[2] = math.floor(targetTorque / 0.39)
297 motor6Data[3] = math.floor(actualTorque / 0.39)
298 motor6Data[6] = math.floor(feedbackGearbox / 0.39)
299
300 xorChecksum(motor6Data, 1)
301 print(arrayToString(motor6Data))
302
303 expected = { 0xC2, 0x54, 0x69, 0x00, 0x00, 0xFF, 0x00, 0x00 }
304 return equals(motor6Data, expected)
305 end
306 )";
307
308
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 0);
309 1 }
310
311 4 TEST(LuaVag, ChecksumMotor6) {
312 1 const char* realdata = VAG_CHECKSUM realMotor6Packet R"(
313
314 function testFunc()
315 return xorChecksum(data, 1)
316 end
317 )";
318
319
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(realdata).value_or(0), 0x3D);
320 1 }
321
322 #define realMotor5Packet "\ndata = { 0x1C, 0x08, 0xF3, 0x55, 0x19, 0x00, 0x06, 0xAD}\n "
323
324 4 TEST(LuaVag, ChecksumMotor5) {
325 1 const char* realdata = VAG_CHECKSUM realMotor5Packet R"(
326
327 function testFunc()
328 return xorChecksum(data, 8)
329 end
330 )";
331
332
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(realdata).value_or(0), 0xAD);
333 1 }
334
335 4 TEST(LuaVag, unpackMotor5_fuel) {
336 1 const char* script = GET_BIT_RANGE_LSB realMotor5Packet R"(
337 function testFunc()
338 fuelConsumption = getBitRange(data, 16, 15)
339 return fuelConsumption
340 end
341 )";
342
343
3/7
✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
1 EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 22003);
344 1 }
345