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 |