GCC Code Coverage Report


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