LCOV - code coverage report
Current view: top level - tests/core - RssSituationExtractionSameDirectionTests.cpp (source / functions) Hit Total Coverage
Test: ad_rss Lines: 347 349 99.4 %
Date: 2025-07-22 06:53:46 Functions: 19 19 100.0 %
Branches: 354 1512 23.4 %

           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.default_ego_vehicle_rss_dynamics = getEgoRssDynamics();
      22                 :          5 :     constellation.constellation_type = world::ConstellationType::SameDirection;
      23                 :          5 :     constellation.object_rss_dynamics = getObjectRssDynamics();
      24                 :          5 :     constellation.ego_vehicle_rss_dynamics = getEgoRssDynamics();
      25                 :          5 :     leadingObject = createObject(36., 0.);
      26                 :          5 :     leadingObject.object_id = 0;
      27                 :            : 
      28                 :            :     {
      29                 :          5 :       world::OccupiedRegion occupiedRegion;
      30                 :          5 :       occupiedRegion.lon_range.minimum = ParametricValue(0.8);
      31                 :          5 :       occupiedRegion.lon_range.maximum = ParametricValue(1.0);
      32                 :          5 :       occupiedRegion.segment_id = 1.;
      33                 :          5 :       occupiedRegion.lat_range.minimum = ParametricValue(0.2);
      34                 :          5 :       occupiedRegion.lat_range.maximum = ParametricValue(0.4);
      35                 :            : 
      36         [ +  - ]:          5 :       leadingObject.occupied_regions.push_back(occupiedRegion);
      37                 :            :     }
      38                 :            : 
      39                 :          5 :     followingObject = createObject(36., 0.);
      40                 :          5 :     followingObject.object_id = 1;
      41                 :            :     {
      42                 :          5 :       world::OccupiedRegion occupiedRegion;
      43                 :          5 :       occupiedRegion.lon_range.minimum = ParametricValue(0.1);
      44                 :          5 :       occupiedRegion.lon_range.maximum = ParametricValue(0.2);
      45                 :          5 :       occupiedRegion.segment_id = 1.;
      46                 :          5 :       occupiedRegion.lat_range.minimum = ParametricValue(0.6);
      47                 :          5 :       occupiedRegion.lat_range.maximum = ParametricValue(0.8);
      48         [ +  - ]:          5 :       followingObject.occupied_regions.push_back(occupiedRegion);
      49                 :            :     }
      50                 :          5 :   }
      51                 :            : 
      52                 :          5 :   virtual void TearDown()
      53                 :            :   {
      54                 :          5 :     followingObject.occupied_regions.clear();
      55                 :          5 :     leadingObject.occupied_regions.clear();
      56                 :          5 :     constellation.ego_vehicle_road.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.lane_segments.push_back(laneSegment);
      72                 :          6 :     return roadSegment;
      73                 :          0 :   }
      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.lane_segments.push_back(laneSegment);
      87                 :          8 :     return roadSegment;
      88                 :          0 :   }
      89                 :            : 
      90                 :            :   world::Object followingObject;
      91                 :            :   world::Object leadingObject;
      92                 :            :   world::WorldModel worldModel;
      93                 :            :   world::Constellation constellation;
      94                 :            :   RssSituationExtraction constellationExtraction;
      95                 :            : };
      96                 :            : 
      97                 :          4 : TEST_F(RssSituationExtractionSameDirectionTests, noLongitudinalDifference)
      98                 :            : {
      99                 :          1 :   core::RssSituationSnapshot situationSnapshot;
     100                 :            : 
     101         [ +  - ]:          1 :   constellation.ego_vehicle = objectAsEgo(leadingObject);
     102         [ +  - ]:          1 :   constellation.object = followingObject;
     103                 :            : 
     104   [ +  -  +  - ]:          1 :   constellation.ego_vehicle_road.push_back(longitudinalNoDifferenceRoadSegment());
     105         [ +  - ]:          1 :   worldModel.constellations.push_back(constellation);
     106                 :          1 :   worldModel.time_index = 1;
     107                 :            : 
     108   [ +  -  -  +  :          1 :   ASSERT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
             -  -  -  +  
                      - ]
     109   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                -  +  - ]
     110   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                -  +  - ]
     111                 :            : 
     112   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(6));
          -  -  -  -  -  
                -  +  - ]
     113   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_min, Speed(10));
          -  -  -  -  -  
                -  +  - ]
     114   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_max, Speed(10));
          -  -  -  -  -  
                -  +  - ]
     115   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].ego_state.dynamics.alpha_lon.accel_max,
          -  -  -  -  -  
                      - ]
     116         [ +  - ]:          1 :             constellation.ego_vehicle_rss_dynamics.alpha_lon.accel_max);
     117                 :            : 
     118   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
          -  -  -  -  -  
                      - ]
     119         [ +  - ]:          1 :             core::LateralRelativePosition::AtLeft);
     120   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(1));
          -  -  -  -  -  
                -  +  - ]
     121         [ +  - ]:          1 : }
     122                 :            : 
     123                 :          4 : TEST_F(RssSituationExtractionSameDirectionTests, longitudinalDifferenceEgoLeading)
     124                 :            : {
     125                 :          1 :   core::RssSituationSnapshot situationSnapshot;
     126                 :            : 
     127         [ +  - ]:          1 :   constellation.ego_vehicle = objectAsEgo(leadingObject);
     128         [ +  - ]:          1 :   constellation.object = followingObject;
     129                 :          1 :   constellation.object.object_type = world::ObjectType::ArtificialObject;
     130   [ +  -  +  - ]:          1 :   constellation.ego_vehicle_road.push_back(longitudinalDifferenceRoadSegment());
     131         [ +  - ]:          1 :   worldModel.constellations.push_back(constellation);
     132                 :          1 :   worldModel.time_index = 1;
     133                 :            : 
     134   [ +  -  -  +  :          1 :   ASSERT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
             -  -  -  +  
                      - ]
     135   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                -  +  - ]
     136   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                -  +  - ]
     137                 :            : 
     138   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(2));
          -  -  -  -  -  
                -  +  - ]
     139   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_min, Speed(10));
          -  -  -  -  -  
                -  +  - ]
     140   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_max, Speed(10));
          -  -  -  -  -  
                -  +  - ]
     141   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].ego_state.dynamics.alpha_lon.accel_max,
          -  -  -  -  -  
                      - ]
     142         [ +  - ]:          1 :             constellation.ego_vehicle_rss_dynamics.alpha_lon.accel_max);
     143                 :            : 
     144   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
          -  -  -  -  -  
                      - ]
     145         [ +  - ]:          1 :             core::LateralRelativePosition::AtLeft);
     146   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(1));
          -  -  -  -  -  
                -  +  - ]
     147         [ +  - ]:          1 : }
     148                 :            : 
     149                 :          4 : TEST_F(RssSituationExtractionSameDirectionTests, longitudinalDifferenceEgoFollowing)
     150                 :            : {
     151                 :          1 :   core::RssSituationSnapshot situationSnapshot;
     152                 :            : 
     153         [ +  - ]:          1 :   constellation.ego_vehicle = objectAsEgo(followingObject);
     154         [ +  - ]:          1 :   constellation.object = leadingObject;
     155   [ +  -  +  - ]:          1 :   constellation.ego_vehicle_road.push_back(longitudinalDifferenceRoadSegment());
     156         [ +  - ]:          1 :   worldModel.constellations.push_back(constellation);
     157                 :          1 :   worldModel.time_index = 1;
     158                 :            : 
     159   [ +  -  -  +  :          1 :   ASSERT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
             -  -  -  +  
                      - ]
     160   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                -  +  - ]
     161   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                -  +  - ]
     162                 :            : 
     163   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(2));
          -  -  -  -  -  
                -  +  - ]
     164   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_min, Speed(10));
          -  -  -  -  -  
                -  +  - ]
     165   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_max, Speed(10));
          -  -  -  -  -  
                -  +  - ]
     166   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].ego_state.dynamics.alpha_lon.accel_max,
          -  -  -  -  -  
                      - ]
     167         [ +  - ]:          1 :             constellation.object_rss_dynamics.alpha_lon.accel_max);
     168   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].ego_state.dynamics.alpha_lon.brake_min,
          -  -  -  -  -  
                      - ]
     169         [ +  - ]:          1 :             constellation.object_rss_dynamics.alpha_lon.brake_min);
     170                 :            : 
     171   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
          -  -  -  -  -  
                      - ]
     172         [ +  - ]:          1 :             core::LateralRelativePosition::AtRight);
     173   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(1));
          -  -  -  -  -  
                -  +  - ]
     174         [ +  - ]:          1 : }
     175                 :            : 
     176                 :          4 : TEST_F(RssSituationExtractionSameDirectionTests, mergeWorstCase)
     177                 :            : {
     178                 :          1 :   core::RssSituationSnapshot situationSnapshot;
     179                 :            : 
     180         [ +  - ]:          1 :   constellation.ego_vehicle = objectAsEgo(followingObject);
     181         [ +  - ]:          1 :   constellation.object = leadingObject;
     182                 :            : 
     183   [ +  -  +  - ]:          1 :   constellation.ego_vehicle_road.push_back(longitudinalDifferenceRoadSegment());
     184         [ +  - ]:          1 :   worldModel.constellations.push_back(constellation);
     185                 :          1 :   constellation.ego_vehicle_road.clear();
     186   [ +  -  +  - ]:          1 :   constellation.ego_vehicle_road.push_back(longitudinalNoDifferenceRoadSegment());
     187         [ +  - ]:          1 :   worldModel.constellations.push_back(constellation);
     188                 :          1 :   worldModel.time_index = 1;
     189                 :            : 
     190   [ +  -  -  +  :          1 :   ASSERT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
             -  -  -  +  
                      - ]
     191   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                -  +  - ]
     192   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                -  +  - ]
     193                 :            : 
     194   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
          -  -  -  -  -  
                      - ]
     195         [ +  - ]:          1 :             core::LongitudinalRelativePosition::AtBack);
     196   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(2));
          -  -  -  -  -  
                -  +  - ]
     197   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_min, Speed(10));
          -  -  -  -  -  
                -  +  - ]
     198   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_max, Speed(10));
          -  -  -  -  -  
                -  +  - ]
     199   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].ego_state.dynamics.alpha_lon.accel_max,
          -  -  -  -  -  
                      - ]
     200         [ +  - ]:          1 :             constellation.object_rss_dynamics.alpha_lon.accel_max);
     201   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].ego_state.dynamics.alpha_lon.brake_min,
          -  -  -  -  -  
                      - ]
     202         [ +  - ]:          1 :             constellation.object_rss_dynamics.alpha_lon.brake_min);
     203                 :            : 
     204   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
          -  -  -  -  -  
                      - ]
     205         [ +  - ]:          1 :             core::LateralRelativePosition::AtRight);
     206   [ +  -  -  +  :          1 :   ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(1));
          -  -  -  -  -  
                -  +  - ]
     207                 :            : 
     208                 :            :   // adapt velocities
     209         [ +  - ]:          1 :   auto originalObject = worldModel.constellations[1].ego_vehicle;
     210                 :            : 
     211                 :          1 :   worldModel.constellations[1].ego_vehicle.velocity.speed_lat_min = Speed(2.0);
     212                 :          1 :   worldModel.constellations[1].ego_vehicle.velocity.speed_lat_max = Speed(2.2);
     213                 :          1 :   worldModel.time_index++;
     214   [ +  -  -  +  :          1 :   EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     215   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                      - ]
     216   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                      - ]
     217   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lat_min, Speed(0.));
          -  -  -  -  -  
                      - ]
     218   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lat_max, Speed(2.2));
          -  -  -  -  -  
                      - ]
     219         [ +  - ]:          1 :   worldModel.constellations[1].ego_vehicle = originalObject;
     220                 :            : 
     221                 :          1 :   worldModel.constellations[1].ego_vehicle.velocity.speed_lon_min = Speed(10.1);
     222                 :          1 :   worldModel.constellations[1].ego_vehicle.velocity.speed_lon_max = Speed(10.2);
     223                 :          1 :   worldModel.time_index++;
     224   [ +  -  -  +  :          1 :   EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     225   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                      - ]
     226   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                      - ]
     227   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_min, Speed(10.));
          -  -  -  -  -  
                      - ]
     228   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_max, Speed(10.2));
          -  -  -  -  -  
                      - ]
     229         [ +  - ]:          1 :   worldModel.constellations[1].ego_vehicle = originalObject;
     230                 :            : 
     231         [ +  - ]:          1 :   originalObject = worldModel.constellations[1].object;
     232                 :          1 :   worldModel.constellations[1].object.velocity.speed_lat_min = Speed(2.0);
     233                 :          1 :   worldModel.constellations[1].object.velocity.speed_lat_max = Speed(2.2);
     234                 :          1 :   worldModel.time_index++;
     235   [ +  -  -  +  :          1 :   EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     236   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                      - ]
     237   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                      - ]
     238   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].other_state.structured_object_state.velocity.speed_lat_min, Speed(0.));
          -  -  -  -  -  
                      - ]
     239   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].other_state.structured_object_state.velocity.speed_lat_max, Speed(2.2));
          -  -  -  -  -  
                      - ]
     240         [ +  - ]:          1 :   worldModel.constellations[1].object = originalObject;
     241                 :            : 
     242                 :          1 :   worldModel.constellations[1].object.velocity.speed_lon_min = Speed(10.1);
     243                 :          1 :   worldModel.constellations[1].object.velocity.speed_lon_max = Speed(10.2);
     244                 :          1 :   worldModel.time_index++;
     245   [ +  -  -  +  :          1 :   EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     246   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                      - ]
     247   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                      - ]
     248   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].other_state.structured_object_state.velocity.speed_lon_min,
          -  -  -  -  -  
                      - ]
     249                 :          1 :             Speed(10.0));
     250   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].other_state.structured_object_state.velocity.speed_lon_max,
          -  -  -  -  -  
                      - ]
     251                 :          1 :             Speed(10.2));
     252         [ +  - ]:          1 :   worldModel.constellations[1].object = originalObject;
     253                 :            : 
     254                 :            :   // adapt lane correctness
     255                 :          1 :   worldModel.constellations[1].ego_vehicle_road.front().lane_segments.front().driving_direction
     256                 :          1 :     = world::LaneDrivingDirection::Negative;
     257                 :          1 :   worldModel.time_index++;
     258   [ +  -  -  +  :          1 :   EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     259   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                      - ]
     260   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                      - ]
     261   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.is_in_correct_lane, false);
          -  -  -  -  -  
                      - ]
     262   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].other_state.structured_object_state.is_in_correct_lane, true);
          -  -  -  -  -  
                      - ]
     263                 :          1 :   worldModel.constellations[1].ego_vehicle_road.front().lane_segments.front().driving_direction
     264                 :          1 :     = world::LaneDrivingDirection::Positive;
     265                 :            : 
     266                 :            :   // influence relative position
     267         [ +  - ]:          1 :   auto const originalEgoOccupiedRegion = worldModel.constellations[1].ego_vehicle.occupied_regions;
     268         [ +  - ]:          1 :   auto const originalObjectOccupiedRegion = worldModel.constellations[1].object.occupied_regions;
     269                 :          1 :   worldModel.constellations[1].ego_vehicle.occupied_regions.front().lat_range.minimum = ParametricValue(0.);
     270                 :          1 :   worldModel.constellations[1].ego_vehicle.occupied_regions.front().lon_range.maximum = ParametricValue(1.);
     271                 :          1 :   worldModel.time_index++;
     272   [ +  -  -  +  :          1 :   EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     273   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                      - ]
     274   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                      - ]
     275   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
          -  -  -  -  -  
                      - ]
     276                 :          1 :             core::LateralRelativePosition::Overlap);
     277   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(0.));
          -  -  -  -  -  
                      - ]
     278   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
          -  -  -  -  -  
                      - ]
     279                 :          1 :             core::LongitudinalRelativePosition::Overlap);
     280   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(0.));
          -  -  -  -  -  
                      - ]
     281         [ +  - ]:          1 :   worldModel.constellations[1].ego_vehicle.occupied_regions = originalEgoOccupiedRegion;
     282                 :            : 
     283                 :          1 :   worldModel.constellations[0].ego_vehicle.occupied_regions.front().lat_range.minimum = ParametricValue(0.);
     284                 :          1 :   worldModel.constellations[0].ego_vehicle.occupied_regions.front().lon_range.maximum = ParametricValue(1.);
     285                 :          1 :   worldModel.time_index++;
     286   [ +  -  -  +  :          1 :   EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     287   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                      - ]
     288   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                      - ]
     289   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
          -  -  -  -  -  
                      - ]
     290                 :          1 :             core::LateralRelativePosition::Overlap);
     291   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(0.));
          -  -  -  -  -  
                      - ]
     292   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
          -  -  -  -  -  
                      - ]
     293                 :          1 :             core::LongitudinalRelativePosition::Overlap);
     294   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(0.));
          -  -  -  -  -  
                      - ]
     295         [ +  - ]:          1 :   worldModel.constellations[0].ego_vehicle.occupied_regions = originalEgoOccupiedRegion;
     296                 :            : 
     297                 :          1 :   worldModel.constellations[1].ego_vehicle.occupied_regions.front()
     298                 :          1 :     = worldModel.constellations[0].object.occupied_regions.front();
     299                 :          1 :   worldModel.constellations[1].object.occupied_regions.front()
     300                 :          1 :     = worldModel.constellations[0].ego_vehicle.occupied_regions.front();
     301                 :          1 :   worldModel.time_index++;
     302   [ +  -  -  +  :          1 :   EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     303   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                      - ]
     304   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                      - ]
     305   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
          -  -  -  -  -  
                      - ]
     306                 :          1 :             core::LateralRelativePosition::Overlap);
     307   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(0.));
          -  -  -  -  -  
                      - ]
     308   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
          -  -  -  -  -  
                      - ]
     309                 :          1 :             core::LongitudinalRelativePosition::Overlap);
     310   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(0.));
          -  -  -  -  -  
                      - ]
     311         [ +  - ]:          1 :   worldModel.constellations[1].ego_vehicle.occupied_regions = originalEgoOccupiedRegion;
     312         [ +  - ]:          1 :   worldModel.constellations[1].object.occupied_regions = originalObjectOccupiedRegion;
     313                 :            : 
     314                 :          1 :   worldModel.constellations[0].ego_vehicle.occupied_regions.front()
     315                 :          1 :     = worldModel.constellations[1].object.occupied_regions.front();
     316                 :          1 :   worldModel.constellations[0].object.occupied_regions.front()
     317                 :          1 :     = worldModel.constellations[1].ego_vehicle.occupied_regions.front();
     318                 :          1 :   worldModel.time_index++;
     319   [ +  -  -  +  :          1 :   EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     320   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                      - ]
     321   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                      - ]
     322   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
          -  -  -  -  -  
                      - ]
     323                 :          1 :             core::LateralRelativePosition::Overlap);
     324   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(0.));
          -  -  -  -  -  
                      - ]
     325   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
          -  -  -  -  -  
                      - ]
     326                 :          1 :             core::LongitudinalRelativePosition::Overlap);
     327   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(0.));
          -  -  -  -  -  
                      - ]
     328         [ +  - ]:          1 :   worldModel.constellations[0].ego_vehicle.occupied_regions = originalEgoOccupiedRegion;
     329         [ +  - ]:          1 :   worldModel.constellations[0].object.occupied_regions = originalObjectOccupiedRegion;
     330                 :            : 
     331                 :          1 :   worldModel.constellations[1].ego_vehicle.occupied_regions.front().lat_range.minimum = ParametricValue(0.3);
     332                 :          1 :   worldModel.constellations[1].ego_vehicle.occupied_regions.front().lon_range.maximum = ParametricValue(0.9);
     333                 :          1 :   worldModel.time_index++;
     334   [ +  -  -  +  :          1 :   EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     335   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                      - ]
     336   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                      - ]
     337   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
          -  -  -  -  -  
                      - ]
     338                 :          1 :             core::LateralRelativePosition::OverlapRight);
     339   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
          -  -  -  -  -  
                      - ]
     340                 :          1 :             core::LongitudinalRelativePosition::OverlapBack);
     341         [ +  - ]:          1 :   worldModel.constellations[1].ego_vehicle.occupied_regions = originalEgoOccupiedRegion;
     342                 :            : 
     343                 :          1 :   worldModel.constellations[0].ego_vehicle.occupied_regions.front().lat_range.minimum = ParametricValue(0.3);
     344                 :          1 :   worldModel.constellations[0].ego_vehicle.occupied_regions.front().lon_range.maximum = ParametricValue(0.9);
     345                 :          1 :   worldModel.time_index++;
     346   [ +  -  -  +  :          1 :   EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     347   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                      - ]
     348   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                      - ]
     349   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
          -  -  -  -  -  
                      - ]
     350                 :          1 :             core::LateralRelativePosition::OverlapRight);
     351   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
          -  -  -  -  -  
                      - ]
     352                 :          1 :             core::LongitudinalRelativePosition::OverlapBack);
     353         [ +  - ]:          1 :   worldModel.constellations[0].ego_vehicle.occupied_regions = originalEgoOccupiedRegion;
     354                 :            : 
     355         [ +  - ]:          1 :   worldModel.constellations[0].ego_vehicle.occupied_regions = originalObjectOccupiedRegion;
     356         [ +  - ]:          1 :   worldModel.constellations[1].ego_vehicle.occupied_regions = originalObjectOccupiedRegion;
     357         [ +  - ]:          1 :   worldModel.constellations[0].object.occupied_regions = originalEgoOccupiedRegion;
     358         [ +  - ]:          1 :   worldModel.constellations[1].object.occupied_regions = originalEgoOccupiedRegion;
     359                 :          1 :   worldModel.constellations[1].object.occupied_regions.front().lat_range.minimum = ParametricValue(0.3);
     360                 :          1 :   worldModel.constellations[1].object.occupied_regions.front().lon_range.maximum = ParametricValue(0.9);
     361                 :          1 :   worldModel.time_index++;
     362   [ +  -  -  +  :          1 :   EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     363   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                      - ]
     364   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                      - ]
     365   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
          -  -  -  -  -  
                      - ]
     366                 :          1 :             core::LateralRelativePosition::OverlapLeft);
     367   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
          -  -  -  -  -  
                      - ]
     368                 :          1 :             core::LongitudinalRelativePosition::OverlapFront);
     369         [ +  - ]:          1 :   worldModel.constellations[1].object.occupied_regions = originalEgoOccupiedRegion;
     370                 :            : 
     371                 :          1 :   worldModel.constellations[0].object.occupied_regions.front().lat_range.minimum = ParametricValue(0.3);
     372                 :          1 :   worldModel.constellations[0].object.occupied_regions.front().lon_range.maximum = ParametricValue(0.9);
     373                 :          1 :   worldModel.time_index++;
     374   [ +  -  -  +  :          1 :   EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     375   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                      - ]
     376   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                      - ]
     377   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
          -  -  -  -  -  
                      - ]
     378                 :          1 :             core::LateralRelativePosition::OverlapLeft);
     379   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
          -  -  -  -  -  
                      - ]
     380                 :          1 :             core::LongitudinalRelativePosition::OverlapFront);
     381         [ +  - ]:          1 :   worldModel.constellations[0].object.occupied_regions = originalEgoOccupiedRegion;
     382         [ +  - ]:          1 : }
     383                 :            : 
     384                 :          4 : TEST_F(RssSituationExtractionSameDirectionTests, mergeFails)
     385                 :            : {
     386                 :          1 :   core::RssSituationSnapshot situationSnapshot;
     387                 :            : 
     388         [ +  - ]:          1 :   constellation.ego_vehicle = objectAsEgo(followingObject);
     389         [ +  - ]:          1 :   constellation.object = leadingObject;
     390                 :            : 
     391   [ +  -  +  - ]:          1 :   constellation.ego_vehicle_road.push_back(longitudinalDifferenceRoadSegment());
     392         [ +  - ]:          1 :   worldModel.constellations.push_back(constellation);
     393                 :          1 :   constellation.ego_vehicle_road.clear();
     394   [ +  -  +  - ]:          1 :   constellation.ego_vehicle_road.push_back(longitudinalNoDifferenceRoadSegment());
     395         [ +  - ]:          1 :   worldModel.constellations.push_back(constellation);
     396                 :          1 :   worldModel.time_index = 1;
     397                 :            : 
     398                 :            :   // validate setup
     399   [ +  -  -  +  :          1 :   EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     400   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
          -  -  -  -  -  
                      - ]
     401   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                      - ]
     402                 :            : 
     403                 :            :   // adapt dynamics
     404                 :          1 :   auto originalRssDynamics = worldModel.constellations[1].object_rss_dynamics;
     405                 :          1 :   worldModel.constellations[1].object_rss_dynamics.alpha_lat.accel_max = Acceleration(3.33);
     406                 :          1 :   worldModel.time_index++;
     407   [ +  -  -  +  :          1 :   EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     408                 :          1 :   worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
     409                 :            : 
     410                 :          1 :   worldModel.constellations[1].object_rss_dynamics.alpha_lat.brake_min = Acceleration(-3.33);
     411                 :          1 :   worldModel.time_index++;
     412   [ +  -  -  +  :          1 :   EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     413                 :          1 :   worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
     414                 :            : 
     415                 :          1 :   worldModel.constellations[1].object_rss_dynamics.alpha_lon.accel_max = Acceleration(3.33);
     416                 :          1 :   worldModel.time_index++;
     417   [ +  -  -  +  :          1 :   EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     418                 :          1 :   worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
     419                 :            : 
     420                 :          1 :   worldModel.constellations[1].object_rss_dynamics.alpha_lon.brake_max
     421         [ +  - ]:          1 :     = worldModel.constellations[1].object_rss_dynamics.alpha_lon.brake_max + Acceleration(-1.);
     422                 :          1 :   worldModel.time_index++;
     423   [ +  -  -  +  :          1 :   EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     424                 :          1 :   worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
     425                 :            : 
     426                 :          1 :   worldModel.constellations[1].object_rss_dynamics.alpha_lon.brake_min
     427         [ +  - ]:          1 :     = worldModel.constellations[1].object_rss_dynamics.alpha_lon.brake_min - Acceleration(-1.);
     428                 :          1 :   worldModel.time_index++;
     429   [ +  -  -  +  :          1 :   EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     430                 :          1 :   worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
     431                 :            : 
     432                 :          1 :   worldModel.constellations[1].object_rss_dynamics.alpha_lon.brake_min_correct
     433         [ +  - ]:          1 :     = worldModel.constellations[1].object_rss_dynamics.alpha_lon.brake_min_correct + Acceleration(-.5);
     434                 :          1 :   worldModel.time_index++;
     435   [ +  -  -  +  :          1 :   EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     436                 :          1 :   worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
     437                 :            : 
     438                 :          1 :   worldModel.constellations[1].object_rss_dynamics.lateral_fluctuation_margin = Distance(1.);
     439                 :          1 :   worldModel.time_index++;
     440   [ +  -  -  +  :          1 :   EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     441                 :          1 :   worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
     442                 :            : 
     443                 :          1 :   worldModel.constellations[1].object_rss_dynamics.response_time = Duration(5.);
     444                 :          1 :   worldModel.time_index++;
     445   [ +  -  -  +  :          1 :   EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     446                 :          1 :   worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
     447                 :            : 
     448                 :            :   // validate resetting of error setup in the above test code
     449         [ +  - ]:          1 :   worldModel.constellations.resize(1);
     450                 :          1 :   worldModel.time_index++;
     451   [ +  -  -  +  :          1 :   EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
          -  -  -  -  -  
                -  -  - ]
     452   [ +  -  -  +  :          1 :   EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
          -  -  -  -  -  
                      - ]
     453                 :          1 : }
     454                 :            : 
     455                 :            : } // namespace core
     456                 :            : } // namespace rss
     457                 :            : } // namespace ad

Generated by: LCOV version 1.14