Branch data Line data Source code
1 : : // ----------------- BEGIN LICENSE BLOCK ---------------------------------
2 : : //
3 : : // Copyright (C) 2018-2021 Intel Corporation
4 : : //
5 : : // SPDX-License-Identifier: MIT
6 : : //
7 : : // ----------------- END LICENSE BLOCK -----------------------------------
8 : :
9 : : #include <ad/map/landmark/LandmarkOperation.hpp>
10 : : #include <ad/map/point/Operation.hpp>
11 : : #include "IntersectionTrafficLightTests.hpp"
12 : : #include "MapSetup.hpp"
13 : :
14 : : namespace ad {
15 : : namespace map {
16 : :
17 : 4 : point::GeoPoint makeGeoFromNorth()
18 : : {
19 : 4 : return point::createGeoPoint(point::Longitude(8.43744), point::Latitude(49.01884), point::Altitude(0));
20 : : }
21 : :
22 : 4 : point::GeoPoint makeGeoToNorth()
23 : : {
24 : 4 : return point::createGeoPoint(point::Longitude(8.43748), point::Latitude(49.01878), point::Altitude(0));
25 : : }
26 : :
27 : 4 : point::GeoPoint makeGeoFromSouth()
28 : : {
29 : 4 : return point::createGeoPoint(point::Longitude(8.43748), point::Latitude(49.01852), point::Altitude(0));
30 : : }
31 : 4 : point::GeoPoint makeGeoToSouth()
32 : : {
33 : 4 : return point::createGeoPoint(point::Longitude(8.43744), point::Latitude(49.01861), point::Altitude(0));
34 : : }
35 : :
36 : 4 : point::GeoPoint makeGeoFromWest()
37 : : {
38 : 4 : return point::createGeoPoint(point::Longitude(8.43717), point::Latitude(49.01866), point::Altitude(0));
39 : : }
40 : :
41 : 4 : point::GeoPoint makeGeoToWest()
42 : : {
43 : 4 : return point::createGeoPoint(point::Longitude(8.43737), point::Latitude(49.01869), point::Altitude(0));
44 : : }
45 : :
46 : 4 : point::GeoPoint makeGeoFromEast()
47 : : {
48 : 4 : return point::createGeoPoint(point::Longitude(8.43769), point::Latitude(49.01869), point::Altitude(0));
49 : : }
50 : :
51 : 4 : point::GeoPoint makeGeoToEast()
52 : : {
53 : 4 : return point::createGeoPoint(point::Longitude(8.43754), point::Latitude(49.01867), point::Altitude(0));
54 : : }
55 : :
56 : : /* @todo rework base class
57 : : * Ideally there is a base class (similar to IntersectionYieldTest) which uses the same coordinates
58 : : * as are used in all the synthetic tests and only override prepareMap() to provide the map
59 : : * SolidTrafficLights while all the points, e.g. fromNorth, can be taken from
60 : : * SyntheticIntersectionTestBase. But if we do so we loose all the existing functionality for
61 : : * testing traffic light specific stuff as is implemented in IntersectionTrafficLightBase
62 : : *
63 : : * Therefore for all the test here, we always have the functions prepareMap plus all getGeoXXX with
64 : : * the same content.
65 : : */
66 : : struct IntersectionBasicTrafficLightSolidWestToSouthTest : IntersectionTrafficLightWestToSouthTest
67 : : {
68 : 1 : virtual void prepareMap() const override
69 : : {
70 : 1 : ::map_setup::prepareMapSolidTrafficLights();
71 : 1 : }
72 : :
73 : 1 : virtual point::GeoPoint getGeoFromNorth() const override
74 : : {
75 : 1 : return makeGeoFromNorth();
76 : : }
77 : :
78 : 1 : virtual point::GeoPoint getGeoToNorth() const override
79 : : {
80 : 1 : return makeGeoToNorth();
81 : : }
82 : :
83 : 1 : virtual point::GeoPoint getGeoFromSouth() const override
84 : : {
85 : 1 : return makeGeoFromSouth();
86 : : }
87 : 1 : virtual point::GeoPoint getGeoToSouth() const override
88 : : {
89 : 1 : return makeGeoToSouth();
90 : : }
91 : :
92 : 1 : virtual point::GeoPoint getGeoFromWest() const override
93 : : {
94 : 1 : return makeGeoFromWest();
95 : : }
96 : :
97 : 1 : virtual point::GeoPoint getGeoToWest() const override
98 : : {
99 : 1 : return makeGeoToWest();
100 : : }
101 : :
102 : 1 : virtual point::GeoPoint getGeoFromEast() const override
103 : : {
104 : 1 : return makeGeoFromEast();
105 : : }
106 : :
107 : 1 : virtual point::GeoPoint getGeoToEast() const override
108 : : {
109 : 1 : return makeGeoToEast();
110 : : }
111 : : };
112 : :
113 : 2 : TEST_F(IntersectionBasicTrafficLightSolidWestToSouthTest, basic_checks)
114 : : {
115 : 1 : point::GeoPoint geoPoint;
116 : 1 : geoPoint = point::createGeoPoint(point::Longitude(8.4372417), point::Latitude(49.01864298), point::Altitude(3.));
117 : 1 : landmark::LandmarkId id;
118 [ + - ]: 1 : id = landmark::uniqueLandmarkId(geoPoint);
119 [ + - + - ]: 1 : performBasicTrafficLightsChecks(
120 [ + - ]: 1 : {expectedTrafficLight((uint64_t)id, landmark::TrafficLightType::SOLID_RED_YELLOW_GREEN)});
121 : 1 : }
122 : :
123 : : struct IntersectionBasicTrafficLightSolidWestToNorthTest : IntersectionTrafficLightWestToNorthTest
124 : : {
125 : 1 : virtual void prepareMap() const override
126 : : {
127 : 1 : ::map_setup::prepareMapSolidTrafficLights();
128 : 1 : }
129 : :
130 : 1 : virtual point::GeoPoint getGeoFromNorth() const override
131 : : {
132 : 1 : return makeGeoFromNorth();
133 : : }
134 : :
135 : 1 : virtual point::GeoPoint getGeoToNorth() const override
136 : : {
137 : 1 : return makeGeoToNorth();
138 : : }
139 : :
140 : 1 : virtual point::GeoPoint getGeoFromSouth() const override
141 : : {
142 : 1 : return makeGeoFromSouth();
143 : : }
144 : 1 : virtual point::GeoPoint getGeoToSouth() const override
145 : : {
146 : 1 : return makeGeoToSouth();
147 : : }
148 : :
149 : 1 : virtual point::GeoPoint getGeoFromWest() const override
150 : : {
151 : 1 : return makeGeoFromWest();
152 : : }
153 : :
154 : 1 : virtual point::GeoPoint getGeoToWest() const override
155 : : {
156 : 1 : return makeGeoToWest();
157 : : }
158 : :
159 : 1 : virtual point::GeoPoint getGeoFromEast() const override
160 : : {
161 : 1 : return makeGeoFromEast();
162 : : }
163 : :
164 : 1 : virtual point::GeoPoint getGeoToEast() const override
165 : : {
166 : 1 : return makeGeoToEast();
167 : : }
168 : :
169 : 2 : virtual lane::LaneIdSet expectedIncomingLanesWithLowerPriority() const override
170 : : {
171 [ + - + - : 6 : return createUnorderedLaneIdSet({getIncomingLanesNorth(), getIncomingLanesSouth()});
+ + - - ]
172 : : }
173 : :
174 : 2 : virtual lane::LaneIdSet expectedIncomingLanesWithHigherPriority() const override
175 : : {
176 [ + - + - : 4 : return createUnorderedLaneIdSet({getIncomingLanesEast()});
+ + - - ]
177 : : }
178 : : };
179 : :
180 : 2 : TEST_F(IntersectionBasicTrafficLightSolidWestToNorthTest, basic_checks)
181 : : {
182 : 1 : point::GeoPoint geoPoint;
183 : 1 : geoPoint = point::createGeoPoint(point::Longitude(8.4372417), point::Latitude(49.01864298), point::Altitude(3.));
184 : 1 : landmark::LandmarkId id;
185 [ + - ]: 1 : id = landmark::uniqueLandmarkId(geoPoint);
186 [ + - + - ]: 1 : performBasicTrafficLightsChecks(
187 [ + - ]: 1 : {expectedTrafficLight((uint64_t)id, landmark::TrafficLightType::SOLID_RED_YELLOW_GREEN)});
188 : 1 : }
189 : :
190 : : struct IntersectionBasicTrafficLightSolidSouthToWestTest : IntersectionTrafficLightSouthToWestTest
191 : : {
192 : 1 : virtual void prepareMap() const override
193 : : {
194 : 1 : ::map_setup::prepareMapSolidTrafficLights();
195 : 1 : }
196 : :
197 : 1 : virtual point::GeoPoint getGeoFromNorth() const override
198 : : {
199 : 1 : return makeGeoFromNorth();
200 : : }
201 : :
202 : 1 : virtual point::GeoPoint getGeoToNorth() const override
203 : : {
204 : 1 : return makeGeoToNorth();
205 : : }
206 : :
207 : 1 : virtual point::GeoPoint getGeoFromSouth() const override
208 : : {
209 : 1 : return makeGeoFromSouth();
210 : : }
211 : 1 : virtual point::GeoPoint getGeoToSouth() const override
212 : : {
213 : 1 : return makeGeoToSouth();
214 : : }
215 : :
216 : 1 : virtual point::GeoPoint getGeoFromWest() const override
217 : : {
218 : 1 : return makeGeoFromWest();
219 : : }
220 : :
221 : 1 : virtual point::GeoPoint getGeoToWest() const override
222 : : {
223 : 1 : return makeGeoToWest();
224 : : }
225 : :
226 : 1 : virtual point::GeoPoint getGeoFromEast() const override
227 : : {
228 : 1 : return makeGeoFromEast();
229 : : }
230 : :
231 : 1 : virtual point::GeoPoint getGeoToEast() const override
232 : : {
233 : 1 : return makeGeoToEast();
234 : : }
235 : :
236 : 2 : virtual lane::LaneIdSet expectedIncomingLanesWithLowerPriority() const override
237 : : {
238 [ + - + - : 6 : return createUnorderedLaneIdSet({getIncomingLanesEast(), getIncomingLanesWest()});
+ + - - ]
239 : : }
240 : :
241 : 2 : virtual lane::LaneIdSet expectedIncomingLanesWithHigherPriority() const override
242 : : {
243 [ + - + - : 4 : return createUnorderedLaneIdSet({getIncomingLanesNorth()});
+ + - - ]
244 : : }
245 : : };
246 : :
247 : 2 : TEST_F(IntersectionBasicTrafficLightSolidSouthToWestTest, basic_checks)
248 : : {
249 : 1 : point::GeoPoint geoPoint;
250 : 1 : geoPoint = point::createGeoPoint(point::Longitude(8.437514892), point::Latitude(49.01854345), point::Altitude(3.));
251 : 1 : landmark::LandmarkId id;
252 [ + - ]: 1 : id = landmark::uniqueLandmarkId(geoPoint);
253 [ + - + - ]: 1 : performBasicTrafficLightsChecks(
254 [ + - ]: 1 : {expectedTrafficLight((uint64_t)id, landmark::TrafficLightType::SOLID_RED_YELLOW_GREEN)});
255 : 1 : }
256 : :
257 : : struct IntersectionBasicTrafficLightSolidNorthToSouthTest : IntersectionTrafficLightNorthToSouthTest
258 : : {
259 : 1 : virtual void prepareMap() const override
260 : : {
261 : 1 : ::map_setup::prepareMapSolidTrafficLights();
262 : 1 : }
263 : :
264 : 1 : virtual point::GeoPoint getGeoFromNorth() const override
265 : : {
266 : 1 : return makeGeoFromNorth();
267 : : }
268 : :
269 : 1 : virtual point::GeoPoint getGeoToNorth() const override
270 : : {
271 : 1 : return makeGeoToNorth();
272 : : }
273 : :
274 : 1 : virtual point::GeoPoint getGeoFromSouth() const override
275 : : {
276 : 1 : return makeGeoFromSouth();
277 : : }
278 : :
279 : 1 : virtual point::GeoPoint getGeoToSouth() const override
280 : : {
281 : 1 : return makeGeoToSouth();
282 : : }
283 : :
284 : 1 : virtual point::GeoPoint getGeoFromWest() const override
285 : : {
286 : 1 : return makeGeoFromWest();
287 : : }
288 : :
289 : 1 : virtual point::GeoPoint getGeoToWest() const override
290 : : {
291 : 1 : return makeGeoToWest();
292 : : }
293 : :
294 : 1 : virtual point::GeoPoint getGeoFromEast() const override
295 : : {
296 : 1 : return makeGeoFromEast();
297 : : }
298 : :
299 : 1 : virtual point::GeoPoint getGeoToEast() const override
300 : : {
301 : 1 : return makeGeoToEast();
302 : : }
303 : : };
304 : :
305 : 2 : TEST_F(IntersectionBasicTrafficLightSolidNorthToSouthTest, basic_checks)
306 : : {
307 : 1 : point::GeoPoint geoPoint;
308 : 1 : geoPoint = point::createGeoPoint(point::Longitude(8.437399821), point::Latitude(49.0188076), point::Altitude(3.));
309 : 1 : landmark::LandmarkId id;
310 [ + - ]: 1 : id = landmark::uniqueLandmarkId(geoPoint);
311 [ + - + - ]: 1 : performBasicTrafficLightsChecks(
312 [ + - ]: 1 : {expectedTrafficLight((uint64_t)id, landmark::TrafficLightType::SOLID_RED_YELLOW_GREEN)});
313 : 1 : }
314 : :
315 : : } // namespace map
316 : : } // namespace ad
|