GCC Code Coverage Report


Directory: ./
File: unit_tests/tests/lua/test_lua_e65.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 100.0% 96 0 96
Functions: 100.0% 48 0 48
Branches: 42.9% 48 0 112
Decisions: -% 0 - 0

Line Branch Decision Exec Source
1 #include "pch.h"
2 #include "rusefi_lua.h"
3 #include "lua_lib.h"
4
5 #define BMW_CHECKSUM " function bmwChecksum(canID, data, offset, length) \
6 checksum = canID \
7 for i = offset, offset + length - 1,1 \
8 do \
9 checksum = checksum + data[i] \
10 end \
11 checksum = (checksum >> 8) + (checksum & 0xff) \
12 return checksum \
13 end "
14
15 // https://github.com/HeinrichG-V12/E65_ReverseEngineering/blob/main/docs/0x3B4.md
16 4 TEST(LuaE65, Battery) {
17 1 const char* realdata = TWO_BYTES_LSB R"(
18
19 function testFunc()
20 data = {0xdc, 0x03, 0x00, 0x53, 0xFE, 0xD3, 0x04, 0x00}
21 return getTwoBytesLSB(data, 0, 0.0147)
22 end)";
23
24
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), 14.5236);
25 1 }
26
27 4 TEST(LuaE65, testTwoBytes) {
28 1 const char* realdata = TWO_BYTES_LSB R"(
29
30 function testFunc()
31 data = {0xdc, 0x03}
32 return getTwoBytesLSB(data, 0, 1)
33 end)";
34
35
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), 0x03dc);
36 1 }
37
38 // https://github.com/HeinrichG-V12/E65_ReverseEngineering/blob/main/docs/0x0A8.md
39 4 TEST(LuaE65, extractTorqueFromA8) {
40 1 const char* realdata = TWO_BYTES_LSB R"(
41
42 function testFunc()
43 data = { 0x42, 0x89, 0x10, 0x80, 0x10, 0x0F, 0x00, 0x60 }
44 return 0.5 * (getTwoBytesLSB(data, 1, 1) >> 4)
45 end
46 )";
47
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), 0x108 / 2);
48 1 }
49
50 // http://loopybunny.co.uk/CarPC/can/0AA.html
51 4 TEST(LuaE65, Rpm) {
52 1 const char* realdata = TWO_BYTES_LSB R"(
53
54 function testFunc()
55 data = {0x5F, 0x59, 0xFF, 0x00, 0x34, 0x0D, 0x80, 0x99}
56 return getTwoBytesLSB(data, 4, 0.25)
57 end)";
58
59
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), 845);
60 1 }
61
62 4 TEST(LuaE65, gear) {
63 1 const char* realdata = R"(
64
65 function testFunc()
66 data = {0x58}
67 return data[1] & 0xF
68 end)";
69
70
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), 8);
71 1 }
72
73 4 TEST(LuaE65, repackAA) {
74 1 const char* realdata = ARRAY_EQUALS R"(
75
76 function testFunc()
77 rpm = 673.75
78 pedal = 50
79 data = {0x58, 12, 14}
80 expected = {0x58, 12, 14}
81 return equals(data, expected)
82 end)";
83
84
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);
85 1 }
86
87 4 TEST(LuaE65, gearTorque) {
88 1 const char* realdata = GET_BIT_RANGE_LSB R"(
89
90 function testFunc()
91 data = {0x9F, 0x01, 0x32, 0x20, 0x23, 0x30, 0xFF, 0x43}
92 return getBitRange(data, 12, 12)
93 end)";
94
95
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), 0x320);
96 1 }
97
98 4 TEST(LuaE65, offtopicTestGetBitRangeMsb) {
99 1 const char* realdata = GET_BIT_RANGE_MSB R"(
100
101 function testFunc()
102 data = {0x9F, 0x41, 0x32, 0x20, 0x23, 0x30, 0xFF, 0x43}
103 return getBitRangeMsb(data, 12, 12)
104 end)";
105
106
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), 0x9F4);
107 1 }
108
109 4 TEST(LuaE65, offtopicTestGetBitRangeMsb2) {
110 1 const char* realdata = GET_BIT_RANGE_MSB R"(
111
112 function testFunc()
113 data = {0x70, 0x04, 0x1F}
114 return getBitRangeMsb(data, 16, 16)
115 end)";
116
117
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), 0x41f);
118 1 }
119
120 4 TEST(LuaE65, offtopicTestSetBitRangeMsb2) {
121 1 const char* realdata = PRINT_ARRAY ARRAY_EQUALS SET_BIT_RANGE_MSB R"(
122
123 function testFunc()
124 data = {0x68, 0x07}
125 expected = {0x68, 0x07}
126 setBitRangeMsb(data, 8, 13, 0x807)
127 print(arrayToString(data))
128 print(arrayToString(expected))
129 return equals(data, expected)
130 end)";
131
132
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);
133 1 }
134
135 4 TEST(LuaE65, offtopicTestSetBitRangeMsb3) {
136 1 const char* realdata = PRINT_ARRAY ARRAY_EQUALS SET_BIT_RANGE_MSB R"(
137
138 function testFunc()
139 data = {0x68, 0x07}
140 expected = {0x63, 0x04}
141 setBitRangeMsb(data, 8, 13, 0x304)
142 print(arrayToString(data))
143 print(arrayToString(expected))
144 return equals(data, expected)
145 end)";
146
147
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);
148 1 }
149
150 4 TEST(LuaE65, gearTorque2) {
151 1 const char* realdata = GET_BIT_RANGE_LSB R"(
152
153 function testFunc()
154 data = {0x9F, 0x01, 0x32, 0x20, 0x23, 0x30, 0xFF, 0x43}
155 return getBitRange(data, 0, 16)
156 end)";
157
158
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), 0x019F);
159 1 }
160
161 4 TEST(LuaE65, getBitRangeMsbTest) {
162 1 const char* realdata = GET_BIT_RANGE_MSB R"(
163
164 function testFunc()
165 data = {0x9F, 0x01, 0x32, 0x20, 0x23, 0x67, 0x40, 0x00}
166 return getBitRangeMsb(data, 6 * 8, 13)
167 end)";
168
169
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), 0x740);
170 1 }
171
172 4 TEST(LuaE65, setBitRangeMsbTest) {
173 1 const char* realdata = PRINT_ARRAY ARRAY_EQUALS SET_BIT_RANGE_MSB R"(
174
175 function testFunc()
176 data = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
177 setBitRangeMsb(data, 6 * 8, 13, 0x740)
178 expected = {0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x40, 0x00}
179 -- print(arrayToString(data))
180 -- print(arrayToString(expected))
181 return equals(data, expected)
182 end)";
183
184
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);
185 1 }
186
187 4 TEST(LuaE65, gearTorque3) {
188 1 const char* realdata = GET_BIT_RANGE_LSB R"(
189
190 function testFunc()
191 data = {0x9F, 0xDF, 0x32, 0x20, 0x23, 0x30, 0xFF, 0x43}
192 return getBitRange(data, 0, 16)
193 end)";
194
195
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), 0xDF9F);
196 1 }
197
198
199 4 TEST(LuaE65, sumChecksum) {
200 // checksum is first byte
201 // id = A8, packet:
202 // 12 AD 05 A0 05 0F 00 02
203
204 1 const char* realdata = BMW_CHECKSUM R"(
205
206 function testFunc()
207 canID = 0xA8
208 data = { 0xAD, 0x05, 0xA0, 0x05, 0x0F, 0x00, 0x02 }
209 checksum = bmwChecksum(canID, data, 1, 7)
210 return checksum;
211 end)";
212
213
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), 0x12);
214 1 }
215