LCOV - code coverage report
Current view: top level - tests/situation - PhysicsUnitTestsAcceleratedLimitedMovement.cpp (source / functions) Hit Total Coverage
Test: ad_rss Lines: 133 133 100.0 %
Date: 2024-10-01 15:08:14 Functions: 34 34 100.0 %
Branches: 155 830 18.7 %

           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

Generated by: LCOV version 1.14