LCOV - code coverage report
Current view: top level - tests/core - RssSituationExtractionSameDirectionTests.cpp (source / functions) Hit Total Coverage
Test: ad_rss Lines: 308 308 100.0 %
Date: 2024-10-01 15:08:14 Functions: 14 14 100.0 %
Branches: 311 1426 21.8 %

           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                 :            : class RssSituationExtractionSameDirectionTests : public testing::Test
      17                 :            : {
      18                 :            : protected:
      19                 :          5 :   virtual void SetUp()
      20                 :            :   {
      21                 :          5 :     worldModel.defaultEgoVehicleRssDynamics = getEgoRssDynamics();
      22                 :          5 :     scene.situationType = situation::SituationType::SameDirection;
      23                 :          5 :     scene.objectRssDynamics = getObjectRssDynamics();
      24                 :          5 :     scene.egoVehicleRssDynamics = getEgoRssDynamics();
      25                 :          5 :     leadingObject = createObject(36., 0.);
      26                 :          5 :     leadingObject.objectId = 0;
      27                 :            : 
      28                 :            :     {
      29                 :          5 :       world::OccupiedRegion occupiedRegion;
      30                 :          5 :       occupiedRegion.lonRange.minimum = ParametricValue(0.8);
      31                 :          5 :       occupiedRegion.lonRange.maximum = ParametricValue(1.0);
      32                 :          5 :       occupiedRegion.segmentId = 1.;
      33                 :          5 :       occupiedRegion.latRange.minimum = ParametricValue(0.2);
      34                 :          5 :       occupiedRegion.latRange.maximum = ParametricValue(0.4);
      35                 :            : 
      36         [ +  - ]:          5 :       leadingObject.occupiedRegions.push_back(occupiedRegion);
      37                 :            :     }
      38                 :            : 
      39                 :          5 :     followingObject = createObject(36., 0.);
      40                 :          5 :     followingObject.objectId = 1;
      41                 :            :     {
      42                 :          5 :       world::OccupiedRegion occupiedRegion;
      43                 :          5 :       occupiedRegion.lonRange.minimum = ParametricValue(0.1);
      44                 :          5 :       occupiedRegion.lonRange.maximum = ParametricValue(0.2);
      45                 :          5 :       occupiedRegion.segmentId = 1.;
      46                 :          5 :       occupiedRegion.latRange.minimum = ParametricValue(0.6);
      47                 :          5 :       occupiedRegion.latRange.maximum = ParametricValue(0.8);
      48         [ +  - ]:          5 :       followingObject.occupiedRegions.push_back(occupiedRegion);
      49                 :            :     }
      50                 :          5 :   }
      51                 :            : 
      52                 :          5 :   virtual void TearDown()
      53                 :            :   {
      54                 :          5 :     followingObject.occupiedRegions.clear();
      55                 :          5 :     leadingObject.occupiedRegions.clear();
      56                 :          5 :     scene.egoVehicleRoad.clear();
      57                 :          5 :   }
      58                 :            : 
      59                 :          3 :   world::RoadSegment longitudinalNoDifferenceRoadSegment()
      60                 :            :   {
      61                 :          3 :     world::RoadSegment roadSegment;
      62                 :          3 :     world::LaneSegment laneSegment;
      63                 :            : 
      64                 :          3 :     laneSegment.id = 1;
      65                 :          3 :     laneSegment.length.minimum = Distance(10);
      66                 :          3 :     laneSegment.length.maximum = Distance(10);
      67                 :            : 
      68                 :          3 :     laneSegment.width.minimum = Distance(5);
      69                 :          3 :     laneSegment.width.maximum = Distance(5);
      70                 :            : 
      71         [ +  - ]:          3 :     roadSegment.push_back(laneSegment);
      72                 :          6 :     return roadSegment;
      73                 :            :   }
      74                 :            : 
      75                 :          4 :   world::RoadSegment longitudinalDifferenceRoadSegment()
      76                 :            :   {
      77                 :          4 :     world::RoadSegment roadSegment;
      78                 :          4 :     world::LaneSegment laneSegment;
      79                 :            : 
      80                 :          4 :     laneSegment.id = 1;
      81                 :          4 :     laneSegment.length.minimum = Distance(5);
      82                 :          4 :     laneSegment.length.maximum = Distance(10);
      83                 :            : 
      84                 :          4 :     laneSegment.width.minimum = Distance(5);
      85                 :          4 :     laneSegment.width.maximum = Distance(5);
      86         [ +  - ]:          4 :     roadSegment.push_back(laneSegment);
      87                 :          8 :     return roadSegment;
      88                 :            :   }
      89                 :            : 
      90                 :            :   world::Object followingObject;
      91                 :            :   world::Object leadingObject;
      92                 :            :   world::WorldModel worldModel;
      93                 :            :   world::Scene scene;
      94                 :            :   RssSituationExtraction situationExtraction;
      95                 :            : };
      96                 :            : 
      97                 :          2 : TEST_F(RssSituationExtractionSameDirectionTests, noLongitudinalDifference)
      98                 :            : {
      99                 :          1 :   situation::SituationSnapshot situationSnapshot;
     100                 :            : 
     101         [ +  - ]:          1 :   scene.egoVehicle = objectAsEgo(leadingObject);
     102         [ +  - ]:          1 :   scene.object = followingObject;
     103                 :            : 
     104   [ +  -  +  - ]:          1 :   scene.egoVehicleRoad.push_back(longitudinalNoDifferenceRoadSegment());
     105         [ +  - ]:          1 :   worldModel.scenes.push_back(scene);
     106                 :          1 :   worldModel.timeIndex = 1;
     107                 :            : 
     108   [ +  -  -  +  :          1 :   ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     109   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     110   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     111                 :            : 
     112   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(6));
          -  -  -  -  -  
                      - ]
     113   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.minimum, Speed(10));
          -  -  -  -  -  
                      - ]
     114   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.maximum, Speed(10));
          -  -  -  -  -  
                      - ]
     115   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.dynamics.alphaLon.accelMax,
          -  -  -  -  -  
                      - ]
     116                 :            :             scene.egoVehicleRssDynamics.alphaLon.accelMax);
     117                 :            : 
     118   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
          -  -  -  -  -  
                      - ]
     119                 :            :             situation::LateralRelativePosition::AtLeft);
     120   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(1));
          -  -  -  -  -  
                      - ]
     121                 :            : }
     122                 :            : 
     123                 :          2 : TEST_F(RssSituationExtractionSameDirectionTests, longitudinalDifferenceEgoLeading)
     124                 :            : {
     125                 :          1 :   situation::SituationSnapshot situationSnapshot;
     126                 :            : 
     127         [ +  - ]:          1 :   scene.egoVehicle = objectAsEgo(leadingObject);
     128         [ +  - ]:          1 :   scene.object = followingObject;
     129                 :          1 :   scene.object.objectType = world::ObjectType::ArtificialObject;
     130   [ +  -  +  - ]:          1 :   scene.egoVehicleRoad.push_back(longitudinalDifferenceRoadSegment());
     131         [ +  - ]:          1 :   worldModel.scenes.push_back(scene);
     132                 :          1 :   worldModel.timeIndex = 1;
     133                 :            : 
     134   [ +  -  -  +  :          1 :   ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     135   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     136   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     137                 :            : 
     138   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(2));
          -  -  -  -  -  
                      - ]
     139   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.minimum, Speed(10));
          -  -  -  -  -  
                      - ]
     140   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.maximum, Speed(10));
          -  -  -  -  -  
                      - ]
     141   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.dynamics.alphaLon.accelMax,
          -  -  -  -  -  
                      - ]
     142                 :            :             scene.egoVehicleRssDynamics.alphaLon.accelMax);
     143                 :            : 
     144   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
          -  -  -  -  -  
                      - ]
     145                 :            :             situation::LateralRelativePosition::AtLeft);
     146   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(1));
          -  -  -  -  -  
                      - ]
     147                 :            : }
     148                 :            : 
     149                 :          2 : TEST_F(RssSituationExtractionSameDirectionTests, longitudinalDifferenceEgoFollowing)
     150                 :            : {
     151                 :          1 :   situation::SituationSnapshot situationSnapshot;
     152                 :            : 
     153         [ +  - ]:          1 :   scene.egoVehicle = objectAsEgo(followingObject);
     154         [ +  - ]:          1 :   scene.object = leadingObject;
     155   [ +  -  +  - ]:          1 :   scene.egoVehicleRoad.push_back(longitudinalDifferenceRoadSegment());
     156         [ +  - ]:          1 :   worldModel.scenes.push_back(scene);
     157                 :          1 :   worldModel.timeIndex = 1;
     158                 :            : 
     159   [ +  -  -  +  :          1 :   ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     160   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     161   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     162                 :            : 
     163   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(2));
          -  -  -  -  -  
                      - ]
     164   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.minimum, Speed(10));
          -  -  -  -  -  
                      - ]
     165   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.maximum, Speed(10));
          -  -  -  -  -  
                      - ]
     166   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.dynamics.alphaLon.accelMax,
          -  -  -  -  -  
                      - ]
     167                 :            :             scene.objectRssDynamics.alphaLon.accelMax);
     168   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.dynamics.alphaLon.brakeMin,
          -  -  -  -  -  
                      - ]
     169                 :            :             scene.objectRssDynamics.alphaLon.brakeMin);
     170                 :            : 
     171   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
          -  -  -  -  -  
                      - ]
     172                 :            :             situation::LateralRelativePosition::AtRight);
     173   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(1));
          -  -  -  -  -  
                      - ]
     174                 :            : }
     175                 :            : 
     176                 :          2 : TEST_F(RssSituationExtractionSameDirectionTests, mergeWorstCase)
     177                 :            : {
     178                 :          1 :   situation::SituationSnapshot situationSnapshot;
     179                 :            : 
     180         [ +  - ]:          1 :   scene.egoVehicle = objectAsEgo(followingObject);
     181         [ +  - ]:          1 :   scene.object = leadingObject;
     182                 :            : 
     183   [ +  -  +  - ]:          1 :   scene.egoVehicleRoad.push_back(longitudinalDifferenceRoadSegment());
     184         [ +  - ]:          1 :   worldModel.scenes.push_back(scene);
     185                 :          1 :   scene.egoVehicleRoad.clear();
     186   [ +  -  +  - ]:          1 :   scene.egoVehicleRoad.push_back(longitudinalNoDifferenceRoadSegment());
     187         [ +  - ]:          1 :   worldModel.scenes.push_back(scene);
     188                 :          1 :   worldModel.timeIndex = 1;
     189                 :            : 
     190   [ +  -  -  +  :          1 :   ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     191   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     192   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     193                 :            : 
     194   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
          -  -  -  -  -  
                      - ]
     195                 :            :             situation::LongitudinalRelativePosition::AtBack);
     196   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(2));
          -  -  -  -  -  
                      - ]
     197   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.minimum, Speed(10));
          -  -  -  -  -  
                      - ]
     198   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.maximum, Speed(10));
          -  -  -  -  -  
                      - ]
     199   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.dynamics.alphaLon.accelMax,
          -  -  -  -  -  
                      - ]
     200                 :            :             scene.objectRssDynamics.alphaLon.accelMax);
     201   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.dynamics.alphaLon.brakeMin,
          -  -  -  -  -  
                      - ]
     202                 :            :             scene.objectRssDynamics.alphaLon.brakeMin);
     203                 :            : 
     204   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
          -  -  -  -  -  
                      - ]
     205                 :            :             situation::LateralRelativePosition::AtRight);
     206   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(1));
          -  -  -  -  -  
                      - ]
     207                 :            : 
     208                 :            :   // adapt velocities
     209         [ +  - ]:          2 :   auto originalObject = worldModel.scenes[1].egoVehicle;
     210                 :            : 
     211                 :          1 :   worldModel.scenes[1].egoVehicle.velocity.speedLatMin = Speed(2.0);
     212                 :          1 :   worldModel.scenes[1].egoVehicle.velocity.speedLatMax = Speed(2.2);
     213                 :          1 :   worldModel.timeIndex++;
     214   [ +  -  -  +  :          1 :   EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     215   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     216   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     217   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLat.minimum, Speed(0.));
          -  -  -  -  -  
                      - ]
     218   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLat.maximum, Speed(2.2));
          -  -  -  -  -  
                      - ]
     219         [ +  - ]:          1 :   worldModel.scenes[1].egoVehicle = originalObject;
     220                 :            : 
     221                 :          1 :   worldModel.scenes[1].egoVehicle.velocity.speedLonMin = Speed(10.1);
     222                 :          1 :   worldModel.scenes[1].egoVehicle.velocity.speedLonMax = Speed(10.2);
     223                 :          1 :   worldModel.timeIndex++;
     224   [ +  -  -  +  :          1 :   EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     225   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     226   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     227   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.minimum, Speed(10.));
          -  -  -  -  -  
                      - ]
     228   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.maximum, Speed(10.2));
          -  -  -  -  -  
                      - ]
     229         [ +  - ]:          1 :   worldModel.scenes[1].egoVehicle = originalObject;
     230                 :            : 
     231         [ +  - ]:          1 :   originalObject = worldModel.scenes[1].object;
     232                 :          1 :   worldModel.scenes[1].object.velocity.speedLatMin = Speed(2.0);
     233                 :          1 :   worldModel.scenes[1].object.velocity.speedLatMax = Speed(2.2);
     234                 :          1 :   worldModel.timeIndex++;
     235   [ +  -  -  +  :          1 :   EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     236   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     237   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     238   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].otherVehicleState.velocity.speedLat.minimum, Speed(0.));
          -  -  -  -  -  
                      - ]
     239   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].otherVehicleState.velocity.speedLat.maximum, Speed(2.2));
          -  -  -  -  -  
                      - ]
     240         [ +  - ]:          1 :   worldModel.scenes[1].object = originalObject;
     241                 :            : 
     242                 :          1 :   worldModel.scenes[1].object.velocity.speedLonMin = Speed(10.1);
     243                 :          1 :   worldModel.scenes[1].object.velocity.speedLonMax = Speed(10.2);
     244                 :          1 :   worldModel.timeIndex++;
     245   [ +  -  -  +  :          1 :   EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     246   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     247   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     248   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].otherVehicleState.velocity.speedLon.minimum, Speed(10.0));
          -  -  -  -  -  
                      - ]
     249   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].otherVehicleState.velocity.speedLon.maximum, Speed(10.2));
          -  -  -  -  -  
                      - ]
     250         [ +  - ]:          1 :   worldModel.scenes[1].object = originalObject;
     251                 :            : 
     252                 :            :   // adapt lane correctness
     253                 :          1 :   worldModel.scenes[1].egoVehicleRoad.front().front().drivingDirection = world::LaneDrivingDirection::Negative;
     254                 :          1 :   worldModel.timeIndex++;
     255   [ +  -  -  +  :          1 :   EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     256   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     257   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     258   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].egoVehicleState.isInCorrectLane, false);
          -  -  -  -  -  
                      - ]
     259   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].otherVehicleState.isInCorrectLane, true);
          -  -  -  -  -  
                      - ]
     260                 :          1 :   worldModel.scenes[1].egoVehicleRoad.front().front().drivingDirection = world::LaneDrivingDirection::Positive;
     261                 :            : 
     262                 :            :   // influence relative position
     263         [ +  - ]:          2 :   auto const originalEgoOccupiedRegion = worldModel.scenes[1].egoVehicle.occupiedRegions;
     264         [ +  - ]:          2 :   auto const originalObjectOccupiedRegion = worldModel.scenes[1].object.occupiedRegions;
     265                 :          1 :   worldModel.scenes[1].egoVehicle.occupiedRegions.front().latRange.minimum = ParametricValue(0.);
     266                 :          1 :   worldModel.scenes[1].egoVehicle.occupiedRegions.front().lonRange.maximum = ParametricValue(1.);
     267                 :          1 :   worldModel.timeIndex++;
     268   [ +  -  -  +  :          1 :   EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     269   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     270   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     271   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
          -  -  -  -  -  
                      - ]
     272                 :            :             situation::LateralRelativePosition::Overlap);
     273   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(0.));
          -  -  -  -  -  
                      - ]
     274   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
          -  -  -  -  -  
                      - ]
     275                 :            :             situation::LongitudinalRelativePosition::Overlap);
     276   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(0.));
          -  -  -  -  -  
                      - ]
     277         [ +  - ]:          1 :   worldModel.scenes[1].egoVehicle.occupiedRegions = originalEgoOccupiedRegion;
     278                 :            : 
     279                 :          1 :   worldModel.scenes[0].egoVehicle.occupiedRegions.front().latRange.minimum = ParametricValue(0.);
     280                 :          1 :   worldModel.scenes[0].egoVehicle.occupiedRegions.front().lonRange.maximum = ParametricValue(1.);
     281                 :          1 :   worldModel.timeIndex++;
     282   [ +  -  -  +  :          1 :   EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     283   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     284   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     285   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
          -  -  -  -  -  
                      - ]
     286                 :            :             situation::LateralRelativePosition::Overlap);
     287   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(0.));
          -  -  -  -  -  
                      - ]
     288   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
          -  -  -  -  -  
                      - ]
     289                 :            :             situation::LongitudinalRelativePosition::Overlap);
     290   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(0.));
          -  -  -  -  -  
                      - ]
     291         [ +  - ]:          1 :   worldModel.scenes[0].egoVehicle.occupiedRegions = originalEgoOccupiedRegion;
     292                 :            : 
     293                 :          1 :   worldModel.scenes[1].egoVehicle.occupiedRegions.front() = worldModel.scenes[0].object.occupiedRegions.front();
     294                 :          1 :   worldModel.scenes[1].object.occupiedRegions.front() = worldModel.scenes[0].egoVehicle.occupiedRegions.front();
     295                 :          1 :   worldModel.timeIndex++;
     296   [ +  -  -  +  :          1 :   EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     297   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     298   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     299   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
          -  -  -  -  -  
                      - ]
     300                 :            :             situation::LateralRelativePosition::Overlap);
     301   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(0.));
          -  -  -  -  -  
                      - ]
     302   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
          -  -  -  -  -  
                      - ]
     303                 :            :             situation::LongitudinalRelativePosition::Overlap);
     304   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(0.));
          -  -  -  -  -  
                      - ]
     305         [ +  - ]:          1 :   worldModel.scenes[1].egoVehicle.occupiedRegions = originalEgoOccupiedRegion;
     306         [ +  - ]:          1 :   worldModel.scenes[1].object.occupiedRegions = originalObjectOccupiedRegion;
     307                 :            : 
     308                 :          1 :   worldModel.scenes[0].egoVehicle.occupiedRegions.front() = worldModel.scenes[1].object.occupiedRegions.front();
     309                 :          1 :   worldModel.scenes[0].object.occupiedRegions.front() = worldModel.scenes[1].egoVehicle.occupiedRegions.front();
     310                 :          1 :   worldModel.timeIndex++;
     311   [ +  -  -  +  :          1 :   EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     312   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     313   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     314   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
          -  -  -  -  -  
                      - ]
     315                 :            :             situation::LateralRelativePosition::Overlap);
     316   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(0.));
          -  -  -  -  -  
                      - ]
     317   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
          -  -  -  -  -  
                      - ]
     318                 :            :             situation::LongitudinalRelativePosition::Overlap);
     319   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(0.));
          -  -  -  -  -  
                      - ]
     320         [ +  - ]:          1 :   worldModel.scenes[0].egoVehicle.occupiedRegions = originalEgoOccupiedRegion;
     321         [ +  - ]:          1 :   worldModel.scenes[0].object.occupiedRegions = originalObjectOccupiedRegion;
     322                 :            : 
     323                 :          1 :   worldModel.scenes[1].egoVehicle.occupiedRegions.front().latRange.minimum = ParametricValue(0.3);
     324                 :          1 :   worldModel.scenes[1].egoVehicle.occupiedRegions.front().lonRange.maximum = ParametricValue(0.9);
     325                 :          1 :   worldModel.timeIndex++;
     326   [ +  -  -  +  :          1 :   EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     327   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     328   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     329   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
          -  -  -  -  -  
                      - ]
     330                 :            :             situation::LateralRelativePosition::OverlapRight);
     331   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
          -  -  -  -  -  
                      - ]
     332                 :            :             situation::LongitudinalRelativePosition::OverlapBack);
     333         [ +  - ]:          1 :   worldModel.scenes[1].egoVehicle.occupiedRegions = originalEgoOccupiedRegion;
     334                 :            : 
     335                 :          1 :   worldModel.scenes[0].egoVehicle.occupiedRegions.front().latRange.minimum = ParametricValue(0.3);
     336                 :          1 :   worldModel.scenes[0].egoVehicle.occupiedRegions.front().lonRange.maximum = ParametricValue(0.9);
     337                 :          1 :   worldModel.timeIndex++;
     338   [ +  -  -  +  :          1 :   EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     339   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     340   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     341   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
          -  -  -  -  -  
                      - ]
     342                 :            :             situation::LateralRelativePosition::OverlapRight);
     343   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
          -  -  -  -  -  
                      - ]
     344                 :            :             situation::LongitudinalRelativePosition::OverlapBack);
     345         [ +  - ]:          1 :   worldModel.scenes[0].egoVehicle.occupiedRegions = originalEgoOccupiedRegion;
     346                 :            : 
     347         [ +  - ]:          1 :   worldModel.scenes[0].egoVehicle.occupiedRegions = originalObjectOccupiedRegion;
     348         [ +  - ]:          1 :   worldModel.scenes[1].egoVehicle.occupiedRegions = originalObjectOccupiedRegion;
     349         [ +  - ]:          1 :   worldModel.scenes[0].object.occupiedRegions = originalEgoOccupiedRegion;
     350         [ +  - ]:          1 :   worldModel.scenes[1].object.occupiedRegions = originalEgoOccupiedRegion;
     351                 :          1 :   worldModel.scenes[1].object.occupiedRegions.front().latRange.minimum = ParametricValue(0.3);
     352                 :          1 :   worldModel.scenes[1].object.occupiedRegions.front().lonRange.maximum = ParametricValue(0.9);
     353                 :          1 :   worldModel.timeIndex++;
     354   [ +  -  -  +  :          1 :   EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     355   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     356   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     357   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
          -  -  -  -  -  
                      - ]
     358                 :            :             situation::LateralRelativePosition::OverlapLeft);
     359   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
          -  -  -  -  -  
                      - ]
     360                 :            :             situation::LongitudinalRelativePosition::OverlapFront);
     361         [ +  - ]:          1 :   worldModel.scenes[1].object.occupiedRegions = originalEgoOccupiedRegion;
     362                 :            : 
     363                 :          1 :   worldModel.scenes[0].object.occupiedRegions.front().latRange.minimum = ParametricValue(0.3);
     364                 :          1 :   worldModel.scenes[0].object.occupiedRegions.front().lonRange.maximum = ParametricValue(0.9);
     365                 :          1 :   worldModel.timeIndex++;
     366   [ +  -  -  +  :          1 :   EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     367   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     368   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     369   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
          -  -  -  -  -  
                      - ]
     370                 :            :             situation::LateralRelativePosition::OverlapLeft);
     371   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
          -  -  -  -  -  
                      - ]
     372                 :            :             situation::LongitudinalRelativePosition::OverlapFront);
     373         [ +  - ]:          1 :   worldModel.scenes[0].object.occupiedRegions = originalEgoOccupiedRegion;
     374                 :            : }
     375                 :            : 
     376                 :          2 : TEST_F(RssSituationExtractionSameDirectionTests, mergeFails)
     377                 :            : {
     378                 :          2 :   situation::SituationSnapshot situationSnapshot;
     379                 :            : 
     380         [ +  - ]:          1 :   scene.egoVehicle = objectAsEgo(followingObject);
     381         [ +  - ]:          1 :   scene.object = leadingObject;
     382                 :            : 
     383   [ +  -  +  - ]:          1 :   scene.egoVehicleRoad.push_back(longitudinalDifferenceRoadSegment());
     384         [ +  - ]:          1 :   worldModel.scenes.push_back(scene);
     385                 :          1 :   scene.egoVehicleRoad.clear();
     386   [ +  -  +  - ]:          1 :   scene.egoVehicleRoad.push_back(longitudinalNoDifferenceRoadSegment());
     387         [ +  - ]:          1 :   worldModel.scenes.push_back(scene);
     388                 :          1 :   worldModel.timeIndex = 1;
     389                 :            : 
     390                 :            :   // validate setup
     391   [ +  -  -  +  :          1 :   EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     392   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
          -  -  -  -  -  
                      - ]
     393   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     394                 :            : 
     395                 :            :   // adapt dynamics
     396                 :          1 :   auto originalRssDynamics = worldModel.scenes[1].objectRssDynamics;
     397                 :          1 :   worldModel.scenes[1].objectRssDynamics.alphaLat.accelMax = Acceleration(3.33);
     398                 :          1 :   worldModel.timeIndex++;
     399   [ +  -  -  +  :          1 :   EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     400                 :          1 :   worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
     401                 :            : 
     402                 :          1 :   worldModel.scenes[1].objectRssDynamics.alphaLat.brakeMin = Acceleration(-3.33);
     403                 :          1 :   worldModel.timeIndex++;
     404   [ +  -  -  +  :          1 :   EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     405                 :          1 :   worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
     406                 :            : 
     407                 :          1 :   worldModel.scenes[1].objectRssDynamics.alphaLon.accelMax = Acceleration(3.33);
     408                 :          1 :   worldModel.timeIndex++;
     409   [ +  -  -  +  :          1 :   EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     410                 :          1 :   worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
     411                 :            : 
     412                 :          1 :   worldModel.scenes[1].objectRssDynamics.alphaLon.brakeMax
     413         [ +  - ]:          1 :     = worldModel.scenes[1].objectRssDynamics.alphaLon.brakeMax + Acceleration(-1.);
     414                 :          1 :   worldModel.timeIndex++;
     415   [ +  -  -  +  :          1 :   EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     416                 :          1 :   worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
     417                 :            : 
     418                 :          1 :   worldModel.scenes[1].objectRssDynamics.alphaLon.brakeMin
     419         [ +  - ]:          1 :     = worldModel.scenes[1].objectRssDynamics.alphaLon.brakeMin - Acceleration(-1.);
     420                 :          1 :   worldModel.timeIndex++;
     421   [ +  -  -  +  :          1 :   EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     422                 :          1 :   worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
     423                 :            : 
     424                 :          1 :   worldModel.scenes[1].objectRssDynamics.alphaLon.brakeMinCorrect
     425         [ +  - ]:          1 :     = worldModel.scenes[1].objectRssDynamics.alphaLon.brakeMinCorrect + Acceleration(-.5);
     426                 :          1 :   worldModel.timeIndex++;
     427   [ +  -  -  +  :          1 :   EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     428                 :          1 :   worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
     429                 :            : 
     430                 :          1 :   worldModel.scenes[1].objectRssDynamics.lateralFluctuationMargin = Distance(1.);
     431                 :          1 :   worldModel.timeIndex++;
     432   [ +  -  -  +  :          1 :   EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     433                 :          1 :   worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
     434                 :            : 
     435                 :          1 :   worldModel.scenes[1].objectRssDynamics.responseTime = Duration(5.);
     436                 :          1 :   worldModel.timeIndex++;
     437   [ +  -  -  +  :          1 :   EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     438                 :          1 :   worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
     439                 :            : 
     440                 :            :   // validate resetting of error setup in the above test code
     441         [ +  - ]:          1 :   worldModel.scenes.resize(1);
     442                 :          1 :   worldModel.timeIndex++;
     443   [ +  -  -  +  :          1 :   EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     444   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.situations.size(), 1u);
          -  -  -  -  -  
                      - ]
     445                 :          1 : }
     446                 :            : 
     447                 :            : } // namespace core
     448                 :            : } // namespace rss
     449                 :            : } // namespace ad

Generated by: LCOV version 1.14