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 |