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