Branch data Line data Source code
1 : : // ----------------- BEGIN LICENSE BLOCK ---------------------------------
2 : : //
3 : : // Copyright (C) 2018-2021 Intel Corporation
4 : : //
5 : : // SPDX-License-Identifier: LGPL-2.1-only
6 : : //
7 : : // ----------------- END LICENSE BLOCK -----------------------------------
8 : :
9 : : #include "TestSupport.hpp"
10 : : #include "ad/rss/core/RssSituationChecking.hpp"
11 : :
12 : : namespace ad {
13 : : namespace rss {
14 : : namespace situation {
15 : :
16 : : class RssSituationCheckingInputRangeTests : public testing::Test
17 : : {
18 : : protected:
19 : 30 : virtual void SetUp()
20 : : {
21 : 30 : leadingVehicle = createVehicleStateForLongitudinalMotion(100);
22 : :
23 : 30 : followingVehicle = createVehicleStateForLongitudinalMotion(10);
24 : 30 : situation.egoVehicleState = leadingVehicle;
25 : 30 : situation.otherVehicleState = followingVehicle;
26 : 30 : situation.relativePosition.longitudinalDistance = Distance(95.);
27 : 30 : situation.relativePosition.longitudinalPosition = LongitudinalRelativePosition::InFront;
28 : 30 : situation.relativePosition.lateralDistance = Distance(0.);
29 : 30 : situation.relativePosition.lateralPosition = LateralRelativePosition::Overlap;
30 : 30 : situation.situationType = SituationType::SameDirection;
31 : 30 : situation.objectId = 1u;
32 : 30 : }
33 : :
34 : 12001 : virtual void performTestRun()
35 : : {
36 [ + - - + : 12001 : EXPECT_FALSE(situationChecking.checkSituationInputRangeChecked(situation, rssStateSnaphot));
- - - - -
- - - ]
37 : 12001 : }
38 : : core::RssSituationChecking situationChecking;
39 : : VehicleState leadingVehicle;
40 : : VehicleState followingVehicle;
41 : : Situation situation;
42 : : state::RssStateSnapshot rssStateSnaphot;
43 : : };
44 : :
45 : 2 : TEST_F(RssSituationCheckingInputRangeTests, validateTestSetup)
46 : : {
47 [ + - - + : 1 : EXPECT_TRUE(situationChecking.checkSituationInputRangeChecked(situation, rssStateSnaphot));
- - - - -
- - - ]
48 : 1 : }
49 : :
50 : : /**
51 : : * Invalid longitudinal acceleration
52 : : */
53 : :
54 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_acceleration_ego)
55 : : {
56 [ + + ]: 1000 : for (int i = 1; i < 1000; i++)
57 : : {
58 [ + - ]: 999 : situation.egoVehicleState.dynamics.alphaLon.accelMax = -1. * Acceleration(i / 100.);
59 : 999 : performTestRun();
60 : : }
61 : 1 : }
62 : :
63 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_acceleration_other)
64 : : {
65 [ + + ]: 1000 : for (int i = 1; i < 1000; i++)
66 : : {
67 [ + - ]: 999 : situation.otherVehicleState.dynamics.alphaLon.accelMax = -1. * Acceleration(i / 100.);
68 : 999 : performTestRun();
69 : : }
70 : 1 : }
71 : :
72 : : /**
73 : : * Invalid longitudinal brake min
74 : : */
75 : :
76 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_deceleration_brake_min_zero_ego)
77 : : {
78 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMin = Acceleration(0.);
79 : :
80 : 1 : performTestRun();
81 : 1 : }
82 : :
83 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_deceleration_brake_min_positive_ego)
84 : : {
85 [ + + ]: 1000 : for (int i = 1; i < 1000; i++)
86 : : {
87 : 999 : situation.egoVehicleState.dynamics.alphaLon.brakeMin = Acceleration(i / 100.);
88 : 999 : performTestRun();
89 : : }
90 : 1 : }
91 : :
92 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_deceleration_brake_min_zero_other)
93 : : {
94 : 1 : situation.otherVehicleState.dynamics.alphaLon.brakeMin = Acceleration(0.);
95 : :
96 : 1 : performTestRun();
97 : 1 : }
98 : :
99 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_deceleration_brake_min_positive_other)
100 : : {
101 [ + + ]: 1000 : for (int i = 1; i < 1000; i++)
102 : : {
103 : 999 : situation.otherVehicleState.dynamics.alphaLon.brakeMin = Acceleration(i / 100.);
104 : 999 : performTestRun();
105 : : }
106 : 1 : }
107 : :
108 : : /**
109 : : * Invalid longitudinal brake max
110 : : */
111 : :
112 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_deceleration_brake_max_zero_ego)
113 : : {
114 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMax = Acceleration(0.);
115 : 1 : performTestRun();
116 : 1 : }
117 : :
118 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_deceleration_brake_max_positive_ego)
119 : : {
120 [ + + ]: 1000 : for (int i = 1; i < 1000; i++)
121 : : {
122 : 999 : situation.egoVehicleState.dynamics.alphaLon.brakeMax = Acceleration(i / 100.);
123 : 999 : performTestRun();
124 : : }
125 : 1 : }
126 : :
127 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_deceleration_brake_max_zero_other)
128 : : {
129 : 1 : situation.otherVehicleState.dynamics.alphaLon.brakeMax = Acceleration(0.);
130 : 1 : performTestRun();
131 : 1 : }
132 : :
133 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_deceleration_brake_max_positive_other)
134 : : {
135 [ + + ]: 1000 : for (int i = 1; i < 1000; i++)
136 : : {
137 : 999 : situation.otherVehicleState.dynamics.alphaLon.brakeMax = Acceleration(i / 100.);
138 : 999 : performTestRun();
139 : : }
140 : 1 : }
141 : :
142 : : /**
143 : : * Invalid longitudinal brake min correct
144 : : */
145 : :
146 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_deceleration_brake_min_correct_zero_ego)
147 : : {
148 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMinCorrect = Acceleration(0.);
149 : 1 : performTestRun();
150 : 1 : }
151 : :
152 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_deceleration_brake_min_correct_positive_ego)
153 : : {
154 [ + + ]: 1000 : for (int i = 1; i < 1000; i++)
155 : : {
156 : 999 : situation.egoVehicleState.dynamics.alphaLon.brakeMinCorrect = Acceleration(i / 100.);
157 : 999 : performTestRun();
158 : : }
159 : 1 : }
160 : :
161 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_deceleration_brake_min_correct_zero_other)
162 : : {
163 : 1 : situation.otherVehicleState.dynamics.alphaLon.brakeMinCorrect = Acceleration(0.);
164 : 1 : performTestRun();
165 : 1 : }
166 : :
167 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_deceleration_brake_min_correct_positive_other)
168 : : {
169 [ + + ]: 1000 : for (int i = 1; i < 1000; i++)
170 : : {
171 : 999 : situation.otherVehicleState.dynamics.alphaLon.brakeMinCorrect = Acceleration(i / 100.);
172 : 999 : performTestRun();
173 : : }
174 : 1 : }
175 : :
176 : : /**
177 : : * break max < break min
178 : : */
179 : :
180 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_deceleration_brake_max_smaller_brake_min)
181 : : {
182 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMinCorrect = Acceleration(-1.);
183 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMax = Acceleration(-2.);
184 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMin = Acceleration(-3.);
185 : :
186 : 1 : performTestRun();
187 : 1 : }
188 : :
189 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_deceleration_brake_max_smaller_brake_min_correct)
190 : : {
191 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMax = Acceleration(-1.);
192 : :
193 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMin = Acceleration(-1.);
194 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMinCorrect = Acceleration(-2.);
195 : :
196 : 1 : performTestRun();
197 : 1 : }
198 : :
199 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_invalid_deceleration_brake_min_smaller_brake_min_correct)
200 : : {
201 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMin = Acceleration(-1.);
202 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMinCorrect = Acceleration(-2.);
203 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMax = Acceleration(-4.);
204 : :
205 : 1 : performTestRun();
206 : 1 : }
207 : :
208 : : /**
209 : : * Invalid lateral brake min
210 : : */
211 : :
212 : 2 : TEST_F(RssSituationCheckingInputRangeTests, lateral_invalid_deceleration_brake_min_zero_ego)
213 : : {
214 : 1 : situation.egoVehicleState.dynamics.alphaLat.brakeMin = Acceleration(0.);
215 : :
216 : 1 : performTestRun();
217 : 1 : }
218 : :
219 : 2 : TEST_F(RssSituationCheckingInputRangeTests, lateral_invalid_deceleration_brake_min_positive_ego)
220 : : {
221 [ + + ]: 1000 : for (int i = 1; i < 1000; i++)
222 : : {
223 : 999 : situation.egoVehicleState.dynamics.alphaLat.brakeMin = Acceleration(i / 100.);
224 : 999 : performTestRun();
225 : : }
226 : 1 : }
227 : :
228 : 2 : TEST_F(RssSituationCheckingInputRangeTests, lateral_invalid_deceleration_brake_min_zero_other)
229 : : {
230 : 1 : situation.otherVehicleState.dynamics.alphaLat.brakeMin = Acceleration(0.);
231 : :
232 : 1 : performTestRun();
233 : 1 : }
234 : :
235 : 2 : TEST_F(RssSituationCheckingInputRangeTests, lateral_invalid_deceleration_brake_min_positive_other)
236 : : {
237 [ + + ]: 1000 : for (int i = 1; i < 1000; i++)
238 : : {
239 : 999 : situation.otherVehicleState.dynamics.alphaLat.brakeMin = Acceleration(i / 100.);
240 : 999 : performTestRun();
241 : : }
242 : 1 : }
243 : :
244 : : /**
245 : : * Invalid lateral accel max
246 : : */
247 : :
248 : 2 : TEST_F(RssSituationCheckingInputRangeTests, lateral_invalid_acceleration_ego)
249 : : {
250 [ + + ]: 1000 : for (int i = 1; i < 1000; i++)
251 : : {
252 [ + - ]: 999 : situation.otherVehicleState.dynamics.alphaLat.accelMax = -1. * Acceleration(i / 100.);
253 : 999 : performTestRun();
254 : : }
255 : 1 : }
256 : :
257 : : /**
258 : : * Invalid rssState time
259 : : */
260 : :
261 : 2 : TEST_F(RssSituationCheckingInputRangeTests, invalid_response_time_zero_ego)
262 : : {
263 : 1 : situation.otherVehicleState.dynamics.responseTime = Duration(0.);
264 : 1 : performTestRun();
265 : 1 : }
266 : :
267 : 2 : TEST_F(RssSituationCheckingInputRangeTests, invalid_response_time_negative_ego)
268 : : {
269 [ + + ]: 1000 : for (int i = 1; i < 1000; i++)
270 : : {
271 [ + - ]: 999 : situation.otherVehicleState.dynamics.responseTime = -1. * Duration(i / 100.);
272 : 999 : performTestRun();
273 : : }
274 : 1 : }
275 : :
276 : : /**
277 : : * break max == break min
278 : : */
279 : :
280 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_correct_deceleration_brake_max_equals_brake_min)
281 : : {
282 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMax = Acceleration(-4.);
283 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMin = Acceleration(-4.);
284 : :
285 [ + - - + : 1 : ASSERT_TRUE(situationChecking.checkSituationInputRangeChecked(situation, rssStateSnaphot));
- - - - -
- - - ]
286 : : }
287 : :
288 : 2 : TEST_F(RssSituationCheckingInputRangeTests, longitudinal_correct_deceleration_brake_min_equals_brake_min_correct)
289 : : {
290 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMax = Acceleration(-4.);
291 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMin = Acceleration(-3.);
292 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMinCorrect = Acceleration(-3.);
293 : :
294 [ + - - + : 1 : ASSERT_TRUE(situationChecking.checkSituationInputRangeChecked(situation, rssStateSnaphot));
- - - - -
- - - ]
295 : : }
296 : :
297 : 2 : TEST_F(RssSituationCheckingInputRangeTests,
298 : : longitudinal_correct_deceleration_brake_min_equals_brake_min_correct_equals_brake_max)
299 : : {
300 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMax = Acceleration(-3.);
301 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMin = Acceleration(-3.);
302 : 1 : situation.egoVehicleState.dynamics.alphaLon.brakeMinCorrect = Acceleration(-3.);
303 : :
304 [ + - - + : 1 : ASSERT_TRUE(situationChecking.checkSituationInputRangeChecked(situation, rssStateSnaphot));
- - - - -
- - - ]
305 : : }
306 : :
307 : 2 : TEST_F(RssSituationCheckingInputRangeTests, situationSnapshotSizeRange)
308 : : {
309 [ + + ]: 103 : for (size_t situationCount = 0u; situationCount < 1011u; situationCount += 10u)
310 : : {
311 : 204 : SituationSnapshot situationSnapshot;
312 : 204 : state::RssStateSnapshot rssStateSnapshot;
313 [ + - ]: 102 : situationSnapshot.defaultEgoVehicleRssDynamics = getEgoRssDynamics();
314 [ + - ]: 102 : situationSnapshot.situations.resize(situationCount, situation);
315 : 102 : situationSnapshot.timeIndex = situationCount + 1u;
316 [ + + ]: 51612 : for (size_t i = 0u; i < situationCount; ++i)
317 : : {
318 : 51510 : situationSnapshot.situations[i].situationId = i;
319 : 51510 : situationSnapshot.situations[i].objectId = i;
320 : : }
321 : :
322 [ + + ]: 102 : if (situationCount <= 1000u)
323 : : {
324 [ + - - + : 101 : EXPECT_TRUE(situationChecking.checkSituations(situationSnapshot, rssStateSnapshot));
- - - - -
- - - ]
325 : : }
326 : : else
327 : : {
328 [ + - - + : 1 : EXPECT_FALSE(situationChecking.checkSituations(situationSnapshot, rssStateSnapshot));
- - - - -
- - - ]
329 : : }
330 : : }
331 : 1 : }
332 : :
333 : 2 : TEST_F(RssSituationCheckingInputRangeTests, invalid_situation_type)
334 : : {
335 : 1 : situation.situationType = static_cast<SituationType>(-1);
336 : 1 : performTestRun();
337 : 1 : }
338 : :
339 : : #if INVALID_AD_PHYSICS_DISTANCE_THROWS_EXCEPTION
340 : : TEST_F(RssSituationCheckingInputRangeTests, nan_values)
341 : : {
342 : : situation.relativePosition.longitudinalDistance = Distance();
343 : : performTestRun();
344 : : }
345 : : #endif
346 : :
347 : : } // namespace situation
348 : : } // namespace rss
349 : : } // namespace ad
|