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/RssSituationExtraction.hpp"
11 : :
12 : : namespace ad {
13 : : namespace rss {
14 : : namespace core {
15 : :
16 : : using physics::MetricRange;
17 : :
18 : 10 : void performCalculateRelativePositionTest(Distance minA,
19 : : Distance maxA,
20 : : Distance minB,
21 : : Distance maxB,
22 : : core::LateralRelativePosition expectedPositionLatAtoB,
23 : : core::LongitudinalRelativePosition expectedPositionLonAtoB,
24 : : core::LateralRelativePosition expectedPositionLatBtoA,
25 : : core::LongitudinalRelativePosition expectedPositionLonBtoA,
26 : : Distance expectedDistance)
27 : : {
28 : 10 : RssSituationExtraction constellationExtraction;
29 : 10 : MetricRange vehicleALonMetricRange;
30 : 10 : MetricRange vehicleALatMetricRange;
31 : 10 : MetricRange vehicleBLonMetricRange;
32 : 10 : MetricRange vehicleBLatMetricRange;
33 : 10 : core::RelativePosition relative_position;
34 : :
35 : 10 : vehicleALatMetricRange.minimum = minA;
36 : 10 : vehicleALatMetricRange.maximum = maxA;
37 : 10 : vehicleALonMetricRange = vehicleALatMetricRange;
38 : :
39 : 10 : vehicleBLatMetricRange.minimum = minB;
40 : 10 : vehicleBLatMetricRange.maximum = maxB;
41 : 10 : vehicleBLonMetricRange = vehicleBLatMetricRange;
42 : :
43 [ + - ]: 10 : constellationExtraction.calcluateRelativeLongitudinalPosition(vehicleALonMetricRange,
44 : : vehicleBLonMetricRange,
45 : : relative_position.longitudinal_position,
46 : : relative_position.longitudinal_distance);
47 [ + - ]: 10 : constellationExtraction.calcluateRelativeLateralPosition(vehicleALatMetricRange,
48 : : vehicleBLatMetricRange,
49 : : relative_position.lateral_position,
50 : : relative_position.lateral_distance);
51 : :
52 [ + - - + : 10 : ASSERT_EQ(expectedPositionLatAtoB, relative_position.lateral_position);
- - - - -
- + - ]
53 [ + - - + : 10 : ASSERT_EQ(expectedPositionLonAtoB, relative_position.longitudinal_position);
- - - - -
- + - ]
54 [ + - - + : 10 : ASSERT_EQ(expectedDistance, relative_position.lateral_distance);
- - - - -
- + - ]
55 [ + - - + : 10 : ASSERT_EQ(expectedDistance, relative_position.longitudinal_distance);
- - - - -
- + - ]
56 : :
57 [ + - ]: 10 : constellationExtraction.calcluateRelativeLongitudinalPosition(vehicleBLonMetricRange,
58 : : vehicleALonMetricRange,
59 : : relative_position.longitudinal_position,
60 : : relative_position.longitudinal_distance);
61 [ + - ]: 10 : constellationExtraction.calcluateRelativeLateralPosition(vehicleBLatMetricRange,
62 : : vehicleALatMetricRange,
63 : : relative_position.lateral_position,
64 : : relative_position.lateral_distance);
65 : :
66 [ + - - + : 10 : ASSERT_EQ(expectedPositionLatBtoA, relative_position.lateral_position);
- - - - -
- + - ]
67 [ + - - + : 10 : ASSERT_EQ(expectedPositionLonBtoA, relative_position.longitudinal_position);
- - - - -
- + - ]
68 [ + - - + : 10 : ASSERT_EQ(expectedDistance, relative_position.lateral_distance);
- - - - -
- + - ]
69 [ + - - + : 10 : ASSERT_EQ(expectedDistance, relative_position.longitudinal_distance);
- - - - -
- + - ]
70 [ + - ]: 10 : }
71 : :
72 : 4 : TEST(CalcluateRelativePositionTest, no_overlap_positive)
73 : : {
74 [ + - ]: 1 : performCalculateRelativePositionTest(Distance(1.),
75 : : Distance(2.),
76 : : Distance(3.),
77 : : Distance(5.),
78 : : core::LateralRelativePosition::AtLeft,
79 : : core::LongitudinalRelativePosition::AtBack,
80 : : core::LateralRelativePosition::AtRight,
81 : : core::LongitudinalRelativePosition::InFront,
82 : : Distance(1.));
83 : 1 : }
84 : :
85 : 4 : TEST(CalcluateRelativePositionTest, no_overlap_negative)
86 : : {
87 [ + - ]: 1 : performCalculateRelativePositionTest(Distance(-10.),
88 : : Distance(-8.),
89 : : Distance(-5.),
90 : : Distance(-8.),
91 : : core::LateralRelativePosition::AtLeft,
92 : : core::LongitudinalRelativePosition::AtBack,
93 : : core::LateralRelativePosition::AtRight,
94 : : core::LongitudinalRelativePosition::InFront,
95 : : Distance(3.));
96 : 1 : }
97 : :
98 : 4 : TEST(CalcluateRelativePositionTest, no_overlap_mixed)
99 : : {
100 [ + - ]: 1 : performCalculateRelativePositionTest(Distance(-10.),
101 : : Distance(-8.),
102 : : Distance(3.),
103 : : Distance(5.),
104 : : core::LateralRelativePosition::AtLeft,
105 : : core::LongitudinalRelativePosition::AtBack,
106 : : core::LateralRelativePosition::AtRight,
107 : : core::LongitudinalRelativePosition::InFront,
108 : : Distance(11.));
109 : 1 : }
110 : :
111 : 4 : TEST(CalcluateRelativePositionTest, no_overlap_vehicle_crossing_null)
112 : : {
113 [ + - ]: 1 : performCalculateRelativePositionTest(Distance(-10.),
114 : : Distance(-8.),
115 : : Distance(-3.),
116 : : Distance(5.),
117 : : core::LateralRelativePosition::AtLeft,
118 : : core::LongitudinalRelativePosition::AtBack,
119 : : core::LateralRelativePosition::AtRight,
120 : : core::LongitudinalRelativePosition::InFront,
121 : : Distance(5.));
122 : 1 : }
123 : :
124 : 4 : TEST(CalcluateRelativePositionTest, partly_overlap_positive)
125 : : {
126 [ + - ]: 1 : performCalculateRelativePositionTest(Distance(2.),
127 : : Distance(4.),
128 : : Distance(3.),
129 : : Distance(5.),
130 : : core::LateralRelativePosition::OverlapLeft,
131 : : core::LongitudinalRelativePosition::OverlapBack,
132 : : core::LateralRelativePosition::OverlapRight,
133 : : core::LongitudinalRelativePosition::OverlapFront,
134 : : Distance(0.));
135 : 1 : }
136 : :
137 : 4 : TEST(CalcluateRelativePositionTest, partly_overlap_negative)
138 : : {
139 [ + - ]: 1 : performCalculateRelativePositionTest(Distance(-10.),
140 : : Distance(-8.),
141 : : Distance(-9.),
142 : : Distance(-3.),
143 : : core::LateralRelativePosition::OverlapLeft,
144 : : core::LongitudinalRelativePosition::OverlapBack,
145 : : core::LateralRelativePosition::OverlapRight,
146 : : core::LongitudinalRelativePosition::OverlapFront,
147 : : Distance(0.));
148 : 1 : }
149 : :
150 : 4 : TEST(CalcluateRelativePositionTest, partly_overlap_mixed)
151 : : {
152 [ + - ]: 1 : performCalculateRelativePositionTest(Distance(-10.),
153 : : Distance(-8.),
154 : : Distance(-9.),
155 : : Distance(5.),
156 : : core::LateralRelativePosition::OverlapLeft,
157 : : core::LongitudinalRelativePosition::OverlapBack,
158 : : core::LateralRelativePosition::OverlapRight,
159 : : core::LongitudinalRelativePosition::OverlapFront,
160 : : Distance(0.));
161 : 1 : }
162 : :
163 : 4 : TEST(CalcluateRelativePositionTest, full_overlap_positive)
164 : : {
165 [ + - ]: 1 : performCalculateRelativePositionTest(Distance(2.),
166 : : Distance(4.),
167 : : Distance(2.5),
168 : : Distance(3.5),
169 : : core::LateralRelativePosition::Overlap,
170 : : core::LongitudinalRelativePosition::Overlap,
171 : : core::LateralRelativePosition::Overlap,
172 : : core::LongitudinalRelativePosition::Overlap,
173 : : Distance(0.));
174 : 1 : }
175 : :
176 : 4 : TEST(CalcluateRelativePositionTest, full_overlap_negative)
177 : : {
178 [ + - ]: 1 : performCalculateRelativePositionTest(Distance(-10.),
179 : : Distance(-8.),
180 : : Distance(-9.),
181 : : Distance(-8.1),
182 : : core::LateralRelativePosition::Overlap,
183 : : core::LongitudinalRelativePosition::Overlap,
184 : : core::LateralRelativePosition::Overlap,
185 : : core::LongitudinalRelativePosition::Overlap,
186 : : Distance(0.));
187 : 1 : }
188 : :
189 : 4 : TEST(CalcluateRelativePositionTest, full_overlap_mixed)
190 : : {
191 [ + - ]: 1 : performCalculateRelativePositionTest(Distance(-10.),
192 : : Distance(8.),
193 : : Distance(-9.),
194 : : Distance(5.),
195 : : core::LateralRelativePosition::Overlap,
196 : : core::LongitudinalRelativePosition::Overlap,
197 : : core::LateralRelativePosition::Overlap,
198 : : core::LongitudinalRelativePosition::Overlap,
199 : : Distance(0.));
200 : 1 : }
201 : :
202 : : } // namespace core
203 : : } // namespace rss
204 : : } // namespace ad
|