Branch data Line data Source code
1 : : // ----------------- BEGIN LICENSE BLOCK ---------------------------------
2 : : //
3 : : // Copyright (C) 2020-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/situation/Physics.hpp"
11 : :
12 : : namespace ad {
13 : : namespace rss {
14 : : namespace situation {
15 : :
16 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, calculateDistanceOffset)
17 : : {
18 : 1 : Speed resultingSpeed;
19 : 1 : Distance distanceOffset;
20 [ + - - + : 1 : ASSERT_TRUE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
21 : : Speed(4.0), Speed(36.0), Acceleration(2.0), Duration(2.0), resultingSpeed, distanceOffset));
22 [ + - - + : 1 : ASSERT_EQ(Distance(12.0), distanceOffset);
- - - - -
- ]
23 [ + - - + : 1 : ASSERT_EQ(Speed(8.), resultingSpeed);
- - - - -
- ]
24 : : }
25 : :
26 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, maxSpeedOnAccelerationReachedAtEnd)
27 : : {
28 : 1 : Speed resultingSpeed;
29 : 1 : Distance distanceOffset;
30 [ + - - + : 1 : ASSERT_TRUE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
31 : : Speed(4.0), Speed(8.0), Acceleration(2.0), Duration(2.0), resultingSpeed, distanceOffset));
32 [ + - - + : 1 : ASSERT_EQ(Distance(12.0), distanceOffset);
- - - - -
- ]
33 [ + - - + : 1 : ASSERT_EQ(Speed(8.), resultingSpeed);
- - - - -
- ]
34 : : }
35 : :
36 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, maxSpeedOnAccelerationReachedBeforeEnd)
37 : : {
38 : 1 : Speed resultingSpeed;
39 : 1 : Distance distanceOffset;
40 [ + - - + : 1 : ASSERT_TRUE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
41 : : Speed(4.0), Speed(6.0), Acceleration(2.0), Duration(2.0), resultingSpeed, distanceOffset));
42 [ + - - + : 1 : ASSERT_EQ(Distance(11.0), distanceOffset);
- - - - -
- ]
43 [ + - - + : 1 : ASSERT_EQ(Speed(6.), resultingSpeed);
- - - - -
- ]
44 : : }
45 : :
46 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, maxSpeedOnAccelerationReachedAtBeginning)
47 : : {
48 : 1 : Speed resultingSpeed;
49 : 1 : Distance distanceOffset;
50 [ + - - + : 1 : ASSERT_TRUE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
51 : : Speed(6.0), Speed(6.0), Acceleration(2.0), Duration(2.0), resultingSpeed, distanceOffset));
52 [ + - - + : 1 : ASSERT_EQ(Distance(12.0), distanceOffset);
- - - - -
- ]
53 [ + - - + : 1 : ASSERT_EQ(Speed(6.), resultingSpeed);
- - - - -
- ]
54 : : }
55 : :
56 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, maxSpeedOnAccelerationReachedBeforeBeginning)
57 : : {
58 : 1 : Speed resultingSpeed;
59 : 1 : Distance distanceOffset;
60 [ + - - + : 1 : ASSERT_TRUE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
61 : : Speed(6.0), Speed(4.0), Acceleration(2.0), Duration(2.0), resultingSpeed, distanceOffset));
62 [ + - - + : 1 : ASSERT_EQ(Distance(12.0), distanceOffset);
- - - - -
- ]
63 [ + - - + : 1 : ASSERT_EQ(Speed(6.), resultingSpeed);
- - - - -
- ]
64 : : }
65 : :
66 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, decelerationToNonzeroSpeed)
67 : : {
68 : 1 : Speed resultingSpeed;
69 : 1 : Distance distanceOffset;
70 [ + - - + : 1 : ASSERT_TRUE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
71 : : Speed(6.0), Speed(6.0), Acceleration(-2.0), Duration(2.0), resultingSpeed, distanceOffset));
72 [ + - - + : 1 : ASSERT_EQ(Distance(8.0), distanceOffset);
- - - - -
- ]
73 [ + - - + : 1 : ASSERT_EQ(Speed(2.), resultingSpeed);
- - - - -
- ]
74 : : }
75 : :
76 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, noAccel)
77 : : {
78 : 1 : Speed resultingSpeed;
79 : 1 : Distance distanceOffset;
80 [ + - - + : 1 : ASSERT_TRUE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
81 : : Speed(4.0), Speed(6.0), Acceleration(0.0), Duration(2.0), resultingSpeed, distanceOffset));
82 [ + - - + : 1 : ASSERT_EQ(Distance(8.0), distanceOffset);
- - - - -
- ]
83 [ + - - + : 1 : ASSERT_EQ(Speed(4.), resultingSpeed);
- - - - -
- ]
84 : : }
85 : :
86 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, decelerationZeroSpeedAtEnd)
87 : : {
88 : 1 : Speed resultingSpeed;
89 : 1 : Distance distanceOffset;
90 [ + - - + : 1 : ASSERT_TRUE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
91 : : Speed(6.0), Speed(6.0), Acceleration(-3.0), Duration(2.0), resultingSpeed, distanceOffset));
92 [ + - - + : 1 : ASSERT_EQ(Distance(6.0), distanceOffset);
- - - - -
- ]
93 [ + - - + : 1 : ASSERT_EQ(Speed(0.), resultingSpeed);
- - - - -
- ]
94 : : }
95 : :
96 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, decelerationZeroSpeedBeforeEnd)
97 : : {
98 : 1 : Speed resultingSpeed;
99 : 1 : Distance distanceOffset;
100 [ + - - + : 1 : ASSERT_TRUE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
101 : : Speed(6.0), Speed(6.0), Acceleration(-3.0), Duration(3.0), resultingSpeed, distanceOffset));
102 : :
103 [ + - - + : 1 : ASSERT_EQ(Distance(6.0), distanceOffset);
- - - - -
- ]
104 [ + - - + : 1 : ASSERT_EQ(Speed(0.), resultingSpeed);
- - - - -
- ]
105 : : }
106 : :
107 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, negative_duration)
108 : : {
109 : 1 : Speed resultingSpeed;
110 : 1 : Distance distanceOffset;
111 [ + - - + : 1 : ASSERT_FALSE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
112 : : Speed(10.), cMaxSpeedOnAcceleration, Acceleration(2), Duration(-1), resultingSpeed, distanceOffset));
113 : :
114 [ + - - + : 1 : ASSERT_FALSE(calculateDistanceOffsetInAcceleratedMovement(Speed(10.), Acceleration(2), Duration(-1), distanceOffset));
- - - - -
- - - ]
115 [ + - - + : 1 : ASSERT_FALSE(calculateSpeedInAcceleratedMovement(Speed(10.), Acceleration(2), Duration(-1), resultingSpeed));
- - - - -
- - - ]
116 : : }
117 : :
118 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, negative_speed)
119 : : {
120 : 1 : Speed resultingSpeed;
121 : 1 : Distance distanceOffset;
122 [ + - - + : 1 : ASSERT_FALSE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
123 : : Speed(-10.), cMaxSpeedOnAcceleration, Acceleration(2), Duration(1), resultingSpeed, distanceOffset));
124 : : }
125 : :
126 : 2 : TEST(PhysicsUnitTestsDistanceOffsetInAcceleratedMovement, negative_speed_and_negative_acceleration)
127 : : {
128 [ + + ]: 20 : for (auto responseTime = 1; responseTime < 20; responseTime++)
129 : : {
130 : 19 : Distance distanceOffsetA;
131 [ + - - + : 19 : ASSERT_TRUE(calculateDistanceOffsetInAcceleratedMovement(
- - - - -
- - - ]
132 : : Speed(-10.), Acceleration(2), Duration(responseTime), distanceOffsetA));
133 : :
134 : 19 : Speed resultingSpeedA;
135 [ + - - + : 19 : ASSERT_TRUE(
- - - - -
- - - ]
136 : : calculateSpeedInAcceleratedMovement(Speed(-10.), Acceleration(2), Duration(responseTime), resultingSpeedA));
137 : :
138 : 19 : Distance distanceOffsetB;
139 [ + - - + : 19 : ASSERT_TRUE(calculateDistanceOffsetInAcceleratedMovement(
- - - - -
- - - ]
140 : : Speed(10.), Acceleration(-2), Duration(responseTime), distanceOffsetB));
141 : :
142 : 19 : Speed resultingSpeedB;
143 [ + - - + : 19 : ASSERT_TRUE(
- - - - -
- - - ]
144 : : calculateSpeedInAcceleratedMovement(Speed(10.), Acceleration(-2), Duration(responseTime), resultingSpeedB));
145 : :
146 [ + - - + : 19 : ASSERT_NEAR(-static_cast<double>(distanceOffsetA), static_cast<double>(distanceOffsetB), cDoubleNear);
- - - - -
- ]
147 [ + - - + : 19 : ASSERT_NEAR(-static_cast<double>(resultingSpeedA), static_cast<double>(resultingSpeedB), cDoubleNear);
- - - - -
- ]
148 : :
149 : 19 : Distance expectedDistance(responseTime * responseTime - 10 * responseTime);
150 [ + - - + : 19 : ASSERT_NEAR(static_cast<double>(expectedDistance), static_cast<double>(distanceOffsetA), cDoubleNear);
- - - - -
- ]
151 : :
152 : 19 : Distance expectedSpeed(-10. + 2. * responseTime);
153 [ + - - + : 19 : ASSERT_NEAR(static_cast<double>(expectedSpeed), static_cast<double>(resultingSpeedA), cDoubleNear);
- - - - -
- ]
154 : : }
155 : : }
156 : :
157 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, deceleration_to_stop_equal_response_time)
158 : : {
159 : 1 : Distance distanceOffsetA;
160 [ + - - + : 1 : ASSERT_TRUE(calculateStoppingDistance(Speed(4.), Acceleration(-4.), distanceOffsetA));
- - - - -
- - - ]
161 : :
162 : 1 : Speed resultingSpeedB;
163 : 1 : Distance distanceOffsetB;
164 [ + - - + : 1 : ASSERT_TRUE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
165 : : Speed(4.), cMaxSpeedOnAcceleration, Acceleration(-4.), Duration(10.), resultingSpeedB, distanceOffsetB));
166 : :
167 [ + - - + : 1 : ASSERT_NEAR(static_cast<double>(distanceOffsetA), static_cast<double>(distanceOffsetB), cDoubleNear);
- - - - -
- ]
168 [ + - - + : 1 : ASSERT_EQ(Speed(0.), resultingSpeedB);
- - - - -
- ]
169 : :
170 [ + - - + : 1 : ASSERT_TRUE(
- - - - -
- - - ]
171 : : calculateDistanceOffsetInAcceleratedMovement(Speed(4.), Acceleration(-4.), Duration(10.), distanceOffsetA));
172 [ + - + - : 1 : ASSERT_GT(std::fabs(distanceOffsetA - distanceOffsetB), Distance(10.));
- + - - -
- - - ]
173 : : }
174 : :
175 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, checks_zero_acceleration)
176 : : {
177 : 1 : Speed resultingSpeed;
178 : 1 : Distance distanceOffset;
179 [ + - - + : 1 : ASSERT_TRUE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
180 : : Speed(4.), cMaxSpeedOnAcceleration, Acceleration(0.), Duration(1.), resultingSpeed, distanceOffset));
181 [ + - - + : 1 : ASSERT_NEAR(static_cast<double>(distanceOffset), 4., cDoubleNear);
- - - - -
- ]
182 [ + - - + : 1 : ASSERT_EQ(Speed(4.), resultingSpeed);
- - - - -
- ]
183 : :
184 [ + - - + : 1 : ASSERT_TRUE(calculateDistanceOffsetInAcceleratedMovement(Speed(4.), Acceleration(0.), Duration(1.), distanceOffset));
- - - - -
- - - ]
185 [ + - - + : 1 : ASSERT_NEAR(static_cast<double>(distanceOffset), 4., cDoubleNear);
- - - - -
- ]
186 : :
187 [ + - - + : 1 : ASSERT_TRUE(calculateSpeedInAcceleratedMovement(Speed(4.), Acceleration(0.), Duration(1.), resultingSpeed));
- - - - -
- - - ]
188 [ + - - + : 1 : ASSERT_EQ(Speed(4.), resultingSpeed);
- - - - -
- ]
189 : : }
190 : :
191 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, checks_max_speed_no_acceleration)
192 : : {
193 : 1 : Speed resultingSpeed;
194 : 1 : Distance distanceOffset;
195 [ + - - + : 1 : ASSERT_TRUE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
196 : : Speed(4.), Speed(4.), Acceleration(2.), Duration(1.), resultingSpeed, distanceOffset));
197 [ + - - + : 1 : ASSERT_NEAR(static_cast<double>(distanceOffset), 4., cDoubleNear);
- - - - -
- ]
198 [ + - - + : 1 : ASSERT_EQ(Speed(4.), resultingSpeed);
- - - - -
- ]
199 : :
200 [ + - - + : 1 : ASSERT_TRUE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
201 : : Speed(10.), Speed(4.), Acceleration(2.), Duration(1.), resultingSpeed, distanceOffset));
202 [ + - - + : 1 : ASSERT_NEAR(static_cast<double>(distanceOffset), 10., cDoubleNear);
- - - - -
- ]
203 [ + - - + : 1 : ASSERT_EQ(Speed(10.), resultingSpeed);
- - - - -
- ]
204 : :
205 [ + - - + : 1 : ASSERT_TRUE(calculateDistanceOffsetInAcceleratedMovement(Speed(4.), Acceleration(2.), Duration(1.), distanceOffset));
- - - - -
- - - ]
206 [ + - - + : 1 : ASSERT_NEAR(static_cast<double>(distanceOffset), 5., cDoubleNear);
- - - - -
- ]
207 : :
208 [ + - - + : 1 : ASSERT_TRUE(calculateSpeedInAcceleratedMovement(Speed(4.), Acceleration(2.), Duration(1.), resultingSpeed));
- - - - -
- - - ]
209 [ + - - + : 1 : ASSERT_EQ(Speed(6.), resultingSpeed);
- - - - -
- ]
210 : : }
211 : :
212 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, checks_acceleration_time1s)
213 : : {
214 : 1 : Speed resultingSpeed;
215 : 1 : Distance distanceOffset;
216 [ + - - + : 1 : ASSERT_TRUE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
217 : : Speed(4.), cMaxSpeedOnAcceleration, Acceleration(2.), Duration(1.), resultingSpeed, distanceOffset));
218 [ + - - + : 1 : ASSERT_NEAR(static_cast<double>(distanceOffset), 5., cDoubleNear);
- - - - -
- ]
219 [ + - - + : 1 : ASSERT_EQ(Speed(6.), resultingSpeed);
- - - - -
- ]
220 : :
221 [ + - - + : 1 : ASSERT_TRUE(calculateDistanceOffsetInAcceleratedMovement(Speed(4.), Acceleration(2.), Duration(1.), distanceOffset));
- - - - -
- - - ]
222 [ + - - + : 1 : ASSERT_NEAR(static_cast<double>(distanceOffset), 5., cDoubleNear);
- - - - -
- ]
223 : :
224 [ + - - + : 1 : ASSERT_TRUE(calculateSpeedInAcceleratedMovement(Speed(4.), Acceleration(2.), Duration(1.), resultingSpeed));
- - - - -
- - - ]
225 [ + - - + : 1 : ASSERT_EQ(Speed(6.), resultingSpeed);
- - - - -
- ]
226 : : }
227 : :
228 : 2 : TEST(PhysicsUnitTestsAcceleratedLimitedMovement, checks_acceleration_time2s)
229 : : {
230 : 1 : Speed resultingSpeed;
231 : 1 : Distance distanceOffset;
232 [ + - - + : 1 : ASSERT_TRUE(calculateAcceleratedLimitedMovement(
- - - - -
- - - ]
233 : : Speed(4.), cMaxSpeedOnAcceleration, Acceleration(2.), Duration(2.), resultingSpeed, distanceOffset));
234 [ + - - + : 1 : ASSERT_NEAR(static_cast<double>(distanceOffset), 12., cDoubleNear);
- - - - -
- ]
235 [ + - - + : 1 : ASSERT_EQ(Speed(8.), resultingSpeed);
- - - - -
- ]
236 : :
237 [ + - - + : 1 : ASSERT_TRUE(calculateDistanceOffsetInAcceleratedMovement(Speed(4.), Acceleration(2.), Duration(2.), distanceOffset));
- - - - -
- - - ]
238 [ + - - + : 1 : ASSERT_NEAR(static_cast<double>(distanceOffset), 12., cDoubleNear);
- - - - -
- ]
239 : :
240 [ + - - + : 1 : ASSERT_TRUE(calculateSpeedInAcceleratedMovement(Speed(4.), Acceleration(2.), Duration(2.), resultingSpeed));
- - - - -
- - - ]
241 [ + - - + : 1 : ASSERT_EQ(Speed(8.), resultingSpeed);
- - - - -
- ]
242 : : }
243 : :
244 : : } // namespace situation
245 : : } // namespace rss
246 : : } // namespace ad
|