Branch data Line data Source code
1 : : // ----------------- BEGIN LICENSE BLOCK ---------------------------------
2 : : //
3 : : // Copyright (C) 2019-2021 Intel Corporation
4 : : //
5 : : // SPDX-License-Identifier: LGPL-2.1-only
6 : : //
7 : : // ----------------- END LICENSE BLOCK -----------------------------------
8 : :
9 : : #include "RssSceneCreationTest.hpp"
10 : :
11 : : struct RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South : public RssSceneCreationTestWithRoute
12 : : {
13 : : /*
14 : : * | |
15 : : * | |
16 : : * | |
17 : : * | |___________
18 : : * |
19 : : * | O1 O0
20 : : * | O2
21 : : * | E2 E3 E4
22 : : * | ____________
23 : : * | O3 E1 |
24 : : * | |
25 : : * | |
26 : : * | O4 E0 |
27 : : */
28 : : };
29 : :
30 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e0_o0)
31 : : {
32 [ + - + - : 4 : performSceneTest(
+ - + - ]
33 [ + - ]: 1 : locationSouthIncoming(),
34 [ + - ]: 2 : locationEastIncoming(),
35 : : std::initializer_list<ExpectedResultTuple>{
36 : : // here we get 2 object predictions, all leading to the opposite direction case
37 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 3u, 0u, ::ad::physics::Speed(15.2778)),
38 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 3u, 0u, ::ad::physics::Speed(15.2778))});
39 : 1 : }
40 : :
41 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e0_o1)
42 : : {
43 [ + - + - : 4 : performSceneTest(
+ - + - ]
44 [ + - ]: 1 : locationSouthIncoming(),
45 [ + - ]: 2 : locationEastEntering(),
46 : : std::initializer_list<ExpectedResultTuple>{
47 : : // here we get 2 object predictions, all leading to the opposite direction case
48 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 2u, 0u, ::ad::physics::Speed(15.2778)),
49 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 2u, 0u, ::ad::physics::Speed(15.2778))});
50 : 1 : }
51 : :
52 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e0_o2)
53 : : {
54 [ + - + - : 4 : performSceneTest(
+ - + - ]
55 [ + - ]: 1 : locationSouthIncoming(),
56 [ + - ]: 2 : locationEast2South(),
57 : : std::initializer_list<ExpectedResultTuple>{
58 : : // because the two right turn predictions have been gone, we get
59 : : // only left turning prediction and since already touching the lane coming from straight
60 : : // another opposite case is added on top
61 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 2u, 0u, ::ad::physics::Speed(15.2778)),
62 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 2u, 0u, ::ad::physics::Speed(15.2778))});
63 : 1 : }
64 : :
65 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e0_o3)
66 : : {
67 [ + - + - : 3 : performSceneTest(
+ - ]
68 [ + - ]: 1 : locationSouthIncoming(),
69 [ + - ]: 2 : locationSouthExiting(),
70 : : std::initializer_list<ExpectedResultTuple>{
71 : : // more or less outside only single opposite case
72 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 1u, 0u, ::ad::physics::Speed(12.2936))});
73 : 1 : }
74 : :
75 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e0_o4)
76 : : {
77 [ + - + - : 3 : performSceneTest(
+ - ]
78 [ + - ]: 1 : locationSouthIncoming(),
79 [ + - ]: 2 : locationSouthOutgoing(),
80 : : std::initializer_list<ExpectedResultTuple>{
81 : : // outside only single opposite case
82 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 1u, 0u, ::ad::physics::Speed(12.2936))});
83 : 1 : }
84 : :
85 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e1_o0)
86 : : {
87 [ + - + - : 4 : performSceneTest(
+ - + - ]
88 [ + - ]: 1 : locationSouthEntering(),
89 [ + - ]: 2 : locationEastIncoming(),
90 : : std::initializer_list<ExpectedResultTuple>{
91 : : // because of the shorter connecting route, we get only 2 object predictions
92 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 2u, 0u, ::ad::physics::Speed(15.2778)),
93 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 2u, 0u, ::ad::physics::Speed(15.2778))});
94 : 1 : }
95 : :
96 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e1_o1)
97 : : {
98 [ + - + - : 4 : performSceneTest(
+ - + - ]
99 [ + - ]: 1 : locationSouthEntering(),
100 [ + - ]: 2 : locationEastEntering(),
101 : : std::initializer_list<ExpectedResultTuple>{
102 : : // because of the shorter connecting route, we get only 2 object predictions
103 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 1u, 0u, ::ad::physics::Speed(15.2778)),
104 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 1u, 0u, ::ad::physics::Speed(15.2778))});
105 : 1 : }
106 : :
107 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e1_o2)
108 : : {
109 [ + - + - : 4 : performSceneTest(
+ - + - ]
110 [ + - ]: 1 : locationSouthEntering(),
111 [ + - ]: 2 : locationEast2South(),
112 : : std::initializer_list<ExpectedResultTuple>{
113 : : // because of the shorter connecting route, we get only 2 object predictions
114 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 1u, 0u, ::ad::physics::Speed(15.2778)),
115 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 1u, 0u, ::ad::physics::Speed(15.2778))});
116 : 1 : }
117 : :
118 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e1_o3)
119 : : {
120 [ + - + - : 4 : performSceneTest(
+ - + - ]
121 [ + - ]: 1 : locationSouthEntering(),
122 [ + - ]: 2 : locationSouthExiting(),
123 : : std::initializer_list<ExpectedResultTuple>{
124 : : // because of the shorter connecting route, we get only 2 object prediction
125 : : // route length is zero, but consists of 2 segments here
126 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 2u, 0u, ::ad::physics::Speed(15.2778)),
127 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 2u, 0u, ::ad::physics::Speed(15.2778))});
128 : 1 : }
129 : :
130 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e1_o4)
131 : : {
132 [ + - + - : 3 : performSceneTest(
+ - ]
133 [ + - ]: 1 : locationSouthEntering(),
134 [ + - ]: 2 : locationSouthOutgoing(),
135 : : std::initializer_list<ExpectedResultTuple>{
136 : : // the other passed our route
137 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::NotRelevant, 3u, 0u, ::ad::physics::Speed(100.))});
138 : 1 : }
139 : :
140 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e2_o0)
141 : : {
142 [ + - + - : 4 : performSceneTest(
+ - + - ]
143 [ + - ]: 1 : locationSouth2East(),
144 [ + - ]: 2 : locationEastIncoming(),
145 : : std::initializer_list<ExpectedResultTuple>{
146 : : // because of the shorter connecting route, we get only 2 object predictions
147 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 2u, 0u, ::ad::physics::Speed(15.2778)),
148 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 2u, 0u, ::ad::physics::Speed(15.2778))});
149 : 1 : }
150 : :
151 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e2_o1)
152 : : {
153 [ + - + - : 4 : performSceneTest(
+ - + - ]
154 [ + - ]: 1 : locationSouth2East(),
155 [ + - ]: 2 : locationEastEntering(),
156 : : std::initializer_list<ExpectedResultTuple>{
157 : : // because of the shorter connecting route, we get only 2 object predictions
158 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 1u, 0u, ::ad::physics::Speed(15.2778)),
159 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 1u, 0u, ::ad::physics::Speed(15.2778))});
160 : 1 : }
161 : :
162 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e2_o2)
163 : : {
164 [ + - + - : 4 : performSceneTest(
+ - + - ]
165 [ + - ]: 1 : locationSouth2East(),
166 [ + - ]: 2 : locationEast2South(),
167 : : std::initializer_list<ExpectedResultTuple>{
168 : : // because of the shorter connecting route (directly opposite to us), we get only 2 object predictions
169 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 1u, 0u, ::ad::physics::Speed(15.2778)),
170 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 1u, 0u, ::ad::physics::Speed(15.2778))});
171 : 1 : }
172 : :
173 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e2_o3)
174 : : {
175 [ + - + - : 3 : performSceneTest(
+ - ]
176 [ + - ]: 1 : locationSouth2East(),
177 [ + - ]: 2 : locationSouthExiting(),
178 : : std::initializer_list<ExpectedResultTuple>{
179 : : // here the other is behind us
180 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::NotRelevant, 3u, 0u, ::ad::physics::Speed(100.))});
181 : 1 : }
182 : :
183 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e2_o4)
184 : : {
185 [ + - + - : 3 : performSceneTest(
+ - ]
186 [ + - ]: 1 : locationSouth2East(),
187 [ + - ]: 2 : locationSouthOutgoing(),
188 : : std::initializer_list<ExpectedResultTuple>{
189 : : // here the other is behind us
190 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::NotRelevant, 3u, 0u, ::ad::physics::Speed(100.))});
191 : 1 : }
192 : :
193 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e3_o0)
194 : : {
195 [ + - + - : 3 : performSceneTest(
+ - ]
196 [ + - ]: 1 : locationEastExiting(),
197 [ + - ]: 2 : locationEastIncoming(),
198 : : std::initializer_list<ExpectedResultTuple>{
199 : : // only one situation left
200 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 1u, 0u, ::ad::physics::Speed(12.2936))});
201 : 1 : }
202 : :
203 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e3_o1)
204 : : {
205 [ + - + - : 5 : performSceneTest(
+ - + - +
- ]
206 [ + - ]: 1 : locationEastExiting(),
207 [ + - ]: 2 : locationEastEntering(),
208 : : std::initializer_list<ExpectedResultTuple>{
209 : : // since the other is besides us, we still find the route from within the intersection
210 : : // as it is the shortest one
211 : : // we get still 3 object predictions
212 : : // route length is zero, but consists of 2 segments here
213 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 2u, 0u, ::ad::physics::Speed(15.2778)),
214 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 2u, 0u, ::ad::physics::Speed(15.2778)),
215 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 2u, 0u, ::ad::physics::Speed(15.2778))});
216 : 1 : }
217 : :
218 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e3_o2)
219 : : {
220 [ + - + - : 3 : performSceneTest(
+ - ]
221 [ + - ]: 1 : locationEastExiting(),
222 [ + - ]: 2 : locationEast2South(),
223 : : std::initializer_list<ExpectedResultTuple>{
224 : : // here the other is behind us
225 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::NotRelevant, 3u, 0u, ::ad::physics::Speed(100.))});
226 : 1 : }
227 : :
228 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e3_o3)
229 : : {
230 [ + - + - : 3 : performSceneTest(
+ - ]
231 [ + - ]: 1 : locationEastExiting(),
232 [ + - ]: 2 : locationSouthExiting(),
233 : : std::initializer_list<ExpectedResultTuple>{
234 : : // here the other is behind us
235 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::NotRelevant, 3u, 0u, ::ad::physics::Speed(100.))});
236 : 1 : }
237 : :
238 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e3_o4)
239 : : {
240 [ + - + - : 3 : performSceneTest(
+ - ]
241 [ + - ]: 1 : locationEastExiting(),
242 [ + - ]: 2 : locationSouthOutgoing(),
243 : : std::initializer_list<ExpectedResultTuple>{
244 : : // here the other is behind us
245 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::NotRelevant, 3u, 0u, ::ad::physics::Speed(100.))});
246 : 1 : }
247 : :
248 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e4_o0)
249 : : {
250 [ + - + - : 3 : performSceneTest(
+ - ]
251 [ + - ]: 1 : locationEastOutgoing(),
252 [ + - ]: 2 : locationEastIncoming(),
253 : : std::initializer_list<ExpectedResultTuple>{
254 : : // only one situation left
255 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 1u, 0u, ::ad::physics::Speed(12.2936))});
256 : 1 : }
257 : :
258 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e4_o1)
259 : : {
260 [ + - + - : 3 : performSceneTest(
+ - ]
261 [ + - ]: 1 : locationEastOutgoing(),
262 [ + - ]: 2 : locationEastEntering(),
263 : : std::initializer_list<ExpectedResultTuple>{
264 : : // here the other is behind us
265 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::NotRelevant, 1u, 0u, ::ad::physics::Speed(100.))});
266 : 1 : }
267 : :
268 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e4_o2)
269 : : {
270 [ + - + - : 3 : performSceneTest(
+ - ]
271 [ + - ]: 1 : locationEastOutgoing(),
272 [ + - ]: 2 : locationEast2South(),
273 : : std::initializer_list<ExpectedResultTuple>{
274 : : // here the other is behind us
275 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::NotRelevant, 1u, 0u, ::ad::physics::Speed(100.))});
276 : 1 : }
277 : :
278 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e4_o3)
279 : : {
280 [ + - + - : 3 : performSceneTest(
+ - ]
281 [ + - ]: 1 : locationEastOutgoing(),
282 [ + - ]: 2 : locationSouthExiting(),
283 : : std::initializer_list<ExpectedResultTuple>{
284 : : // here the other is behind us
285 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::NotRelevant, 1u, 0u, ::ad::physics::Speed(100.))});
286 : 1 : }
287 : :
288 : 2 : TEST_F(RssSceneCreationTestWithRouteEgoSouth2EastOtherEast2South, e4_o4)
289 : : {
290 [ + - + - : 3 : performSceneTest(
+ - ]
291 [ + - ]: 1 : locationEastOutgoing(),
292 [ + - ]: 2 : locationSouthOutgoing(),
293 : : std::initializer_list<ExpectedResultTuple>{
294 : : // here the other is behind us
295 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::NotRelevant, 1u, 0u, ::ad::physics::Speed(100.))});
296 : 1 : }
297 : :
298 : : struct RssSceneCreationTestWithoutRouteEgoSouth2EastOtherEast2South : public RssSceneCreationTestWithoutRoute
299 : : {
300 : : /*
301 : : * | |
302 : : * | |
303 : : * | |
304 : : * | |___________
305 : : * |
306 : : * | O1 O0
307 : : * | O2
308 : : * | E2 E3 E4
309 : : * | ____________
310 : : * | O3 E1 |
311 : : * | |
312 : : * | |
313 : : * | O4 E0 |
314 : : */
315 : : };
316 : :
317 : 2 : TEST_F(RssSceneCreationTestWithoutRouteEgoSouth2EastOtherEast2South, e0_o0)
318 : : {
319 [ + - + - : 6 : performSceneTest(
+ - + - +
- + - ]
320 [ + - ]: 1 : locationSouthIncoming(),
321 [ + - ]: 2 : locationEastIncoming(),
322 : : // here we get 2 object predictions and 3 ego predictions:
323 : : std::initializer_list<ExpectedResultTuple>{
324 : : // ego-turn-right: all 2 object predictions lead to the opposite direction case
325 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 3u, 0u, ::ad::physics::Speed(100.)),
326 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 3u, 0u, ::ad::physics::Speed(100.)),
327 : : // ego-straight: object prediction 1
328 : : // object coming from right has prio
329 : 0 : std::make_tuple(
330 [ + - ]: 1 : ::ad::rss::situation::SituationType::IntersectionObjectHasPriority, 3u, 2u, ::ad::physics::Speed(100.)),
331 : : // ego-straight: object prediction 2
332 : : // object coming from right has prio
333 : 0 : std::make_tuple(
334 [ + - ]: 2 : ::ad::rss::situation::SituationType::IntersectionObjectHasPriority, 3u, 2u, ::ad::physics::Speed(100.))});
335 : 1 : }
336 : :
337 : 2 : TEST_F(RssSceneCreationTestWithoutRouteEgoSouth2EastOtherEast2South, e2_o0)
338 : : {
339 [ + - + - : 6 : performSceneTest(
+ - + - +
- + - ]
340 [ + - ]: 1 : locationSouth2East(),
341 [ + - ]: 2 : locationEastIncoming(),
342 : : // here we get 2 object predictions and 2 ego predictions:
343 : : std::initializer_list<ExpectedResultTuple>{
344 : : // ego-turn-right: all 2 object predictions lead to the opposite direction case
345 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 2u, 0u, ::ad::physics::Speed(100.)),
346 [ + - ]: 1 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 2u, 0u, ::ad::physics::Speed(100.)),
347 : : // ego-straight: object prediction 1
348 : : // first intersection 'not present'; works because no other intersection in prediction and objects intersection is
349 : : // taken (@todo: to be fixed)
350 : : // object coming form right has prio
351 : 0 : std::make_tuple(
352 [ + - ]: 1 : ::ad::rss::situation::SituationType::IntersectionObjectHasPriority, 2u, 2u, ::ad::physics::Speed(100.)),
353 : : // ego-straight: object prediction 2
354 : 0 : std::make_tuple(
355 [ + - ]: 2 : ::ad::rss::situation::SituationType::IntersectionObjectHasPriority, 2u, 2u, ::ad::physics::Speed(100.))});
356 : 1 : }
357 : :
358 : 2 : TEST_F(RssSceneCreationTestWithoutRouteEgoSouth2EastOtherEast2South, e0_o4)
359 : : {
360 [ + - + - : 3 : performSceneTest(
+ - ]
361 [ + - ]: 1 : locationSouthIncoming(),
362 [ + - ]: 2 : locationSouthOutgoing(),
363 : : std::initializer_list<ExpectedResultTuple>{
364 : : // outside only single opposite case
365 [ + - ]: 2 : std::make_tuple(::ad::rss::situation::SituationType::OppositeDirection, 1u, 0u, ::ad::physics::Speed(100.))});
366 : 1 : }
367 : :
368 : : //@TODO fill in between steps of RssSceneCreationTestWithoutRouteEgoSouth2EastOtherEast2South
|