From d28ec823e247b4a2c254544b888f8c4b50b8bb16 Mon Sep 17 00:00:00 2001 From: "ziqi.zhou" <ziqi.zhou@ansys.com> Date: Fri, 14 Mar 2025 09:50:56 +0100 Subject: [PATCH 1/8] feat: support traveled distance condition --- .../TraveledDistanceCondition_impl.cpp | 27 ----------- .../TraveledDistanceCondition_impl.cpp | 46 +++++++++++++++++++ .../TraveledDistanceCondition_impl.h | 11 ++++- 3 files changed, 55 insertions(+), 29 deletions(-) delete mode 100644 engine/gen/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp create mode 100644 engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp rename engine/{gen => src}/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h (78%) diff --git a/engine/gen/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp b/engine/gen/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp deleted file mode 100644 index f06cb272..00000000 --- a/engine/gen/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp +++ /dev/null @@ -1,27 +0,0 @@ -/******************************************************************************** - * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0. - * - * SPDX-License-Identifier: EPL-2.0 - ********************************************************************************/ - -#include "Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h" - -#include "Utils/Logger.h" - -namespace OpenScenarioEngine::v1_3 -{ - -bool TraveledDistanceCondition::IsSatisfied() const -{ - // Note: - // - Access to values parse to mantle/ose datatypes: this->values.xxx - // - Access to mantle interfaces: this->mantle.xxx - Logger::Error("Method TraveledDistanceCondition::IsSatisfied() not implemented yet (returning \"true\" by default)"); - return true; -} - -} // namespace OpenScenarioEngine::v1_3 diff --git a/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp b/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp new file mode 100644 index 00000000..4d01bd76 --- /dev/null +++ b/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp @@ -0,0 +1,46 @@ +/******************************************************************************** + * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * Copyright (c) 2025 Ansys, Inc. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + ********************************************************************************/ + +#include "Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h" + +#include "Utils/Logger.h" + +namespace OpenScenarioEngine::v1_3 +{ + +bool TraveledDistanceCondition::IsSatisfied() +{ + const auto& entity = mantle.environment->GetEntityRepository().Get(values.triggeringEntity); + if (!entity) + { + Logger::Warning("TraveledDistanceCondition: TraveledDistanceCondition cannot be satisfied (entity undefined)."); + return false; + } + + auto current_position = entity->get().GetPosition(); + + if (!is_initialized) + { + last_position = current_position; + traveled_distance = 0.0; + is_initialized = true; + return traveled_distance >= values.value; + } + + const auto distance_delta = (current_position - last_position).Length().value(); + + traveled_distance += distance_delta; + last_position = current_position; + + return traveled_distance >= values.value; +} + +} // namespace OpenScenarioEngine::v1_3 diff --git a/engine/gen/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h b/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h similarity index 78% rename from engine/gen/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h rename to engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h index b1c2f545..5ccbf9a4 100644 --- a/engine/gen/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h +++ b/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h @@ -1,5 +1,6 @@ /******************************************************************************** * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * Copyright (c) 2025 Ansys, Inc. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -10,7 +11,9 @@ #pragma once +#include <MantleAPI/Common/vector.h> #include <MantleAPI/Execution/i_environment.h> +#include <units.h> #include "Utils/EntityBroker.h" @@ -34,11 +37,15 @@ public: : values{std::move(values)}, mantle{std::move(interfaces)} {}; - bool IsSatisfied() const; + bool IsSatisfied(); private: Values values; Interfaces mantle; + + double traveled_distance{}; + mantle_api::Vec3<units::length::meter_t> last_position; + bool is_initialized{false}; }; -} // namespace OpenScenarioEngine::v1_3 \ No newline at end of file +} // namespace OpenScenarioEngine::v1_3 -- GitLab From ce939583114eb0b677fd2d1dc2bdfbd33dd58bd3 Mon Sep 17 00:00:00 2001 From: "ziqi.zhou" <ziqi.zhou@ansys.com> Date: Fri, 14 Mar 2025 09:51:09 +0100 Subject: [PATCH 2/8] test: add mock tests --- .../TraveledDistanceConditionTest.cpp | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp diff --git a/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp b/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp new file mode 100644 index 00000000..c7a79908 --- /dev/null +++ b/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp @@ -0,0 +1,83 @@ +/******************************************************************************** + * Copyright (c) 2025 Ansys, Inc. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + ********************************************************************************/ + +#include <MantleAPI/Test/test_utils.h> +#include <gtest/gtest.h> + +#include "Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h" +#include "TestUtils/TestLogger.h" + +using namespace mantle_api; +using namespace units::literals; + +class TraveledDistanceConditionTestFixture : public ::testing::Test +{ +protected: + void SetUp() override + { + mock_environment_ = std::make_shared<MockEnvironment>(); + } + + std::shared_ptr<MockEnvironment> mock_environment_; + OpenScenarioEngine::v1_3::TraveledDistanceCondition::Values condition_values_{.triggeringEntity = "vehicle1", + .value = 10.0}; +}; + +TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithMockedEntities_WhenCheckingCondition_ThenDoesNotThrow) +{ + OpenScenarioEngine::v1_3::TraveledDistanceCondition traveled_distance_condition(condition_values_, + {mock_environment_}); + + EXPECT_NO_THROW([[maybe_unused]] auto _ = traveled_distance_condition.IsSatisfied()); +} + +TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithNoMovement_WhenCheckingCondition_ThenReturnsFalse) +{ + OpenScenarioEngine::v1_3::TraveledDistanceCondition traveled_distance_condition(condition_values_, + {mock_environment_}); + + EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle &>(mock_environment_->GetEntityRepository().Get(condition_values_.triggeringEntity).value().get()), + GetPosition()) + .WillOnce(::testing::Return(mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m})); + + EXPECT_FALSE(traveled_distance_condition.IsSatisfied()); +} + +TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithSatisfcatoryTraveledDistance_WhenCheckingCondition_ThenReturnsTrue) +{ + const auto moved_distance = 11.0_m; + OpenScenarioEngine::v1_3::TraveledDistanceCondition traveled_distance_condition(condition_values_, + {mock_environment_}); + + EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle &>(mock_environment_->GetEntityRepository().Get(condition_values_.triggeringEntity).value().get()), + GetPosition()) + .WillOnce(::testing::Return(mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m})) + .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{moved_distance, 0_m, 0_m})); + + EXPECT_FALSE(traveled_distance_condition.IsSatisfied()); + // Condition is satisfied after the second call. + EXPECT_TRUE(traveled_distance_condition.IsSatisfied()); +} + +TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithUnsatisfcatoryTraveledDistance_WhenCheckingCondition_ThenReturnsFalse) +{ + const auto moved_distance = 5.0_m; + OpenScenarioEngine::v1_3::TraveledDistanceCondition traveled_distance_condition(condition_values_, + {mock_environment_}); + + EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle &>(mock_environment_->GetEntityRepository().Get(condition_values_.triggeringEntity).value().get()), + GetPosition()) + .WillOnce(::testing::Return(mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m})) + .WillOnce(::testing::Return(mantle_api::Vec3<units::length::meter_t>{moved_distance, 0_m, 0_m})); + + EXPECT_FALSE(traveled_distance_condition.IsSatisfied()); + // Condition is still not satisfied after the second call. + EXPECT_FALSE(traveled_distance_condition.IsSatisfied()); +} -- GitLab From 4cda26e409d4bfe86ae91ea3f7f280b35c4f7865 Mon Sep 17 00:00:00 2001 From: "ziqi.zhou" <ziqi.zhou@ansys.com> Date: Fri, 14 Mar 2025 09:51:21 +0100 Subject: [PATCH 3/8] chore: update cmake --- engine/CMakeLists.txt | 9 +++++---- engine/cmake/generated_files.cmake | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index c6a104d6..2e937ef7 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -70,10 +70,10 @@ target_include_directories( $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> ) -target_link_libraries(${PROJECT_NAME} PUBLIC openscenario_api::shared - antlr4_runtime::shared - Yase::agnostic_behavior_tree - units::units +target_link_libraries(${PROJECT_NAME} PUBLIC openscenario_api::shared + antlr4_runtime::shared + Yase::agnostic_behavior_tree + units::units MantleAPI::MantleAPI PRIVATE Stochastics::Stochastics) @@ -195,6 +195,7 @@ target_sources( ${CMAKE_CURRENT_LIST_DIR}/tests/Storyboard/ByEntityCondition/SpeedConditionTest.cpp ${CMAKE_CURRENT_LIST_DIR}/tests/Storyboard/ByEntityCondition/TimeHeadwayConditionTest.cpp ${CMAKE_CURRENT_LIST_DIR}/tests/Storyboard/ByEntityCondition/TimeToCollisionConditionTest.cpp + ${CMAKE_CURRENT_LIST_DIR}/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp ${CMAKE_CURRENT_LIST_DIR}/tests/Storyboard/ByValueCondition/SimulationTimeConditionTest.cpp ${CMAKE_CURRENT_LIST_DIR}/tests/Storyboard/ByValueCondition/UserDefinedValueConditionTest.cpp ${CMAKE_CURRENT_LIST_DIR}/tests/Storyboard/GenericAction/AcquirePositionActionTest.cpp diff --git a/engine/cmake/generated_files.cmake b/engine/cmake/generated_files.cmake index 20fd7859..a1d1a403 100644 --- a/engine/cmake/generated_files.cmake +++ b/engine/cmake/generated_files.cmake @@ -111,7 +111,6 @@ list(APPEND ${PROJECT_NAME}_SOURCES gen/Storyboard/ByEntityCondition/RelativeAngleCondition_impl.cpp gen/Storyboard/ByEntityCondition/RelativeClearanceCondition_impl.cpp gen/Storyboard/ByEntityCondition/StandStillCondition_impl.cpp - gen/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp gen/Storyboard/ByValueCondition/ParameterCondition_impl.cpp gen/Storyboard/ByValueCondition/StoryboardElementStateCondition_impl.cpp gen/Storyboard/ByValueCondition/TimeOfDayCondition_impl.cpp @@ -207,6 +206,7 @@ list(APPEND ${PROJECT_NAME}_SOURCES src/Storyboard/ByEntityCondition/SpeedCondition_impl.cpp src/Storyboard/ByEntityCondition/TimeHeadwayCondition_impl.cpp src/Storyboard/ByEntityCondition/TimeToCollisionCondition_impl.cpp + src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp src/Storyboard/ByValueCondition/SimulationTimeCondition_impl.cpp src/Storyboard/ByValueCondition/UserDefinedValueCondition_impl.cpp src/Storyboard/GenericAction/AcquirePositionAction_impl.cpp @@ -378,7 +378,6 @@ list(APPEND ${PROJECT_NAME}_HEADERS gen/Storyboard/ByEntityCondition/TimeHeadwayCondition_impl.h gen/Storyboard/ByEntityCondition/TimeToCollisionCondition.h gen/Storyboard/ByEntityCondition/TraveledDistanceCondition.h - gen/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h gen/Storyboard/ByValueCondition/ParameterCondition.h gen/Storyboard/ByValueCondition/ParameterCondition_impl.h gen/Storyboard/ByValueCondition/SimulationTimeCondition.h @@ -571,6 +570,7 @@ list(APPEND ${PROJECT_NAME}_HEADERS src/Node/TrafficSignalPhaseNode.h src/Node/TriggerableCompositeNode.h src/Storyboard/ByEntityCondition/TimeToCollisionCondition_impl.h + src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h src/Storyboard/ByValueCondition/UserDefinedValueCondition_impl.h src/Storyboard/GenericAction/ActivateControllerAction.h src/Storyboard/GenericAction/ActivateControllerAction_base.h -- GitLab From 096944036fe304fbee8aca99a8b5d48887da0a05 Mon Sep 17 00:00:00 2001 From: "ziqi.zhou" <ziqi.zhou@ansys.com> Date: Mon, 17 Mar 2025 10:10:45 +0100 Subject: [PATCH 4/8] docs: update readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0484affe..a475cafc 100644 --- a/README.md +++ b/README.md @@ -115,6 +115,7 @@ The following Actions and Conditions of [ASAM OpenSCENARIO XML](https://publicat | ByEntityCondition | [SpeedCondition](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/SpeedCondition.html) | âœ”ï¸ Without direction | | ByEntityCondition | [TimeHeadwayCondition](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/TimeHeadwayCondition.html) | Supports only `DistanceType::kEuclidean` and `CoordinateSystem::kEntity` or `CoordinateSystem::kLane` | | ByEntityCondition | [TimeToCollisionCondition](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/TimeToCollisionCondition.html) | In clarification: [Issue #7](https://gitlab.eclipse.org/eclipse/openopass/openscenario1_engine/-/issues/7) | +| ByEntityCondition | [TraveledDistanceCondition](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/TraveledDistanceCondition.html) | âœ”ï¸ Complete | | ByValueCondition | [SimulationTimeCondition](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/SimulationTimeCondition.html) | âœ”ï¸ Complete | | ByValueCondition | [UserDefinedValueCondition](https://publications.pages.asam.net/standards/ASAM_OpenSCENARIO/ASAM_OpenSCENARIO_XML/latest/generated/content/UserDefinedValueCondition.html) | âœ”ï¸ Complete | -- GitLab From ea6006b23a98af459ff7444c58bac98ba9e7edb6 Mon Sep 17 00:00:00 2001 From: "ziqi.zhou" <ziqi.zhou@ansys.com> Date: Mon, 17 Mar 2025 13:10:37 +0100 Subject: [PATCH 5/8] feat: remove redundent part --- .../TraveledDistanceCondition_impl.cpp | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp b/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp index 4d01bd76..afd6694e 100644 --- a/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp +++ b/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp @@ -11,6 +11,7 @@ #include "Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h" +#include "Utils/EntityUtils.h" #include "Utils/Logger.h" namespace OpenScenarioEngine::v1_3 @@ -18,21 +19,14 @@ namespace OpenScenarioEngine::v1_3 bool TraveledDistanceCondition::IsSatisfied() { - const auto& entity = mantle.environment->GetEntityRepository().Get(values.triggeringEntity); - if (!entity) - { - Logger::Warning("TraveledDistanceCondition: TraveledDistanceCondition cannot be satisfied (entity undefined)."); - return false; - } + const auto& entity = EntityUtils::GetEntityByName(mantle.environment, values.triggeringEntity); - auto current_position = entity->get().GetPosition(); + auto current_position = entity.GetPosition(); if (!is_initialized) { last_position = current_position; - traveled_distance = 0.0; is_initialized = true; - return traveled_distance >= values.value; } const auto distance_delta = (current_position - last_position).Length().value(); -- GitLab From 0aa412b80975198a93687a3f49b3f4979bf3d3e9 Mon Sep 17 00:00:00 2001 From: "ziqi.zhou" <ziqi.zhou@ansys.com> Date: Mon, 24 Mar 2025 15:46:41 +0100 Subject: [PATCH 6/8] fix: modify based on review --- .../TraveledDistanceCondition_impl.cpp | 13 ++++--- .../TraveledDistanceCondition_impl.h | 5 ++- .../TraveledDistanceConditionTest.cpp | 35 ++++++++++--------- 3 files changed, 26 insertions(+), 27 deletions(-) diff --git a/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp b/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp index afd6694e..11e1a10b 100644 --- a/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp +++ b/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp @@ -23,18 +23,17 @@ bool TraveledDistanceCondition::IsSatisfied() auto current_position = entity.GetPosition(); - if (!is_initialized) + if (!last_position_.has_value()) { - last_position = current_position; - is_initialized = true; + last_position_ = current_position; } - const auto distance_delta = (current_position - last_position).Length().value(); + const auto distance_delta = (current_position - last_position_.value()).Length(); - traveled_distance += distance_delta; - last_position = current_position; + traveled_distance_ += distance_delta; + last_position_ = current_position; - return traveled_distance >= values.value; + return traveled_distance_.value() >= values.value; } } // namespace OpenScenarioEngine::v1_3 diff --git a/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h b/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h index 5ccbf9a4..90179ad1 100644 --- a/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h +++ b/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h @@ -43,9 +43,8 @@ private: Values values; Interfaces mantle; - double traveled_distance{}; - mantle_api::Vec3<units::length::meter_t> last_position; - bool is_initialized{false}; + units::length::meter_t traveled_distance_{}; + std::optional<mantle_api::Vec3<units::length::meter_t>> last_position_; }; } // namespace OpenScenarioEngine::v1_3 diff --git a/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp b/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp index c7a79908..3f7ed423 100644 --- a/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp +++ b/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp @@ -16,6 +16,9 @@ using namespace mantle_api; using namespace units::literals; +using testing::Eq; +using testing::Return; +using TestPosition = mantle_api::Vec3<units::length::meter_t>; class TraveledDistanceConditionTestFixture : public ::testing::Test { @@ -23,9 +26,12 @@ protected: void SetUp() override { mock_environment_ = std::make_shared<MockEnvironment>(); + auto &entity_ref = mock_environment_->GetEntityRepository().Get(condition_values_.triggeringEntity)->get(); + entity_under_test_ = dynamic_cast<MockVehicle *>(&entity_ref); } std::shared_ptr<MockEnvironment> mock_environment_; + MockVehicle *entity_under_test_; OpenScenarioEngine::v1_3::TraveledDistanceCondition::Values condition_values_{.triggeringEntity = "vehicle1", .value = 10.0}; }; @@ -43,41 +49,36 @@ TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithNoMovement_WhenCh OpenScenarioEngine::v1_3::TraveledDistanceCondition traveled_distance_condition(condition_values_, {mock_environment_}); - EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle &>(mock_environment_->GetEntityRepository().Get(condition_values_.triggeringEntity).value().get()), - GetPosition()) - .WillOnce(::testing::Return(mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m})); + EXPECT_CALL(*entity_under_test_, GetPosition()) + .WillOnce(::testing::Return(TestPosition{0_m, 0_m, 0_m})); EXPECT_FALSE(traveled_distance_condition.IsSatisfied()); } TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithSatisfcatoryTraveledDistance_WhenCheckingCondition_ThenReturnsTrue) { - const auto moved_distance = 11.0_m; OpenScenarioEngine::v1_3::TraveledDistanceCondition traveled_distance_condition(condition_values_, {mock_environment_}); - EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle &>(mock_environment_->GetEntityRepository().Get(condition_values_.triggeringEntity).value().get()), - GetPosition()) - .WillOnce(::testing::Return(mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m})) - .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{moved_distance, 0_m, 0_m})); + EXPECT_CALL(*entity_under_test_, GetPosition()) + .WillOnce(::testing::Return(TestPosition{0_m, 0_m, 0_m})) + .WillRepeatedly(::testing::Return(TestPosition{10_m, 0_m, 0_m})); - EXPECT_FALSE(traveled_distance_condition.IsSatisfied()); + EXPECT_THAT(traveled_distance_condition.IsSatisfied(), Eq(false)); // Condition is satisfied after the second call. - EXPECT_TRUE(traveled_distance_condition.IsSatisfied()); + EXPECT_THAT(traveled_distance_condition.IsSatisfied(), Eq(true)); } TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithUnsatisfcatoryTraveledDistance_WhenCheckingCondition_ThenReturnsFalse) { - const auto moved_distance = 5.0_m; OpenScenarioEngine::v1_3::TraveledDistanceCondition traveled_distance_condition(condition_values_, {mock_environment_}); - EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle &>(mock_environment_->GetEntityRepository().Get(condition_values_.triggeringEntity).value().get()), - GetPosition()) - .WillOnce(::testing::Return(mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m})) - .WillOnce(::testing::Return(mantle_api::Vec3<units::length::meter_t>{moved_distance, 0_m, 0_m})); + EXPECT_CALL(*entity_under_test_, GetPosition()) + .WillOnce(Return(TestPosition{0_m, 0_m, 0_m})) + .WillOnce(Return(TestPosition{1_m, 0_m, 0_m})); - EXPECT_FALSE(traveled_distance_condition.IsSatisfied()); + EXPECT_THAT(traveled_distance_condition.IsSatisfied(), Eq(false)); // Condition is still not satisfied after the second call. - EXPECT_FALSE(traveled_distance_condition.IsSatisfied()); + EXPECT_THAT(traveled_distance_condition.IsSatisfied(), Eq(false)); } -- GitLab From 186a5678e6c7508be5e0470cee699aff51c8c1ef Mon Sep 17 00:00:00 2001 From: "ziqi.zhou" <ziqi.zhou@ansys.com> Date: Mon, 24 Mar 2025 16:46:07 +0100 Subject: [PATCH 7/8] test: make tests clear --- .../ByEntityCondition/TraveledDistanceConditionTest.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp b/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp index 3f7ed423..a051eeac 100644 --- a/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp +++ b/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp @@ -50,7 +50,7 @@ TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithNoMovement_WhenCh {mock_environment_}); EXPECT_CALL(*entity_under_test_, GetPosition()) - .WillOnce(::testing::Return(TestPosition{0_m, 0_m, 0_m})); + .WillOnce(Return(TestPosition{0_m, 0_m, 0_m})); EXPECT_FALSE(traveled_distance_condition.IsSatisfied()); } @@ -61,8 +61,8 @@ TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithSatisfcatoryTrave {mock_environment_}); EXPECT_CALL(*entity_under_test_, GetPosition()) - .WillOnce(::testing::Return(TestPosition{0_m, 0_m, 0_m})) - .WillRepeatedly(::testing::Return(TestPosition{10_m, 0_m, 0_m})); + .WillOnce(Return(TestPosition{0_m, 0_m, 0_m})) + .WillRepeatedly(Return(TestPosition{10_m, 0_m, 0_m})); EXPECT_THAT(traveled_distance_condition.IsSatisfied(), Eq(false)); // Condition is satisfied after the second call. -- GitLab From 6099e856d90e905c1928e49c4571c709fc8c0cb3 Mon Sep 17 00:00:00 2001 From: "ziqi.zhou" <ziqi.zhou@ansys.com> Date: Tue, 25 Mar 2025 09:11:03 +0100 Subject: [PATCH 8/8] test: modify test value --- .../TraveledDistanceConditionTest.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp b/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp index a051eeac..07417f45 100644 --- a/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp +++ b/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp @@ -33,7 +33,7 @@ protected: std::shared_ptr<MockEnvironment> mock_environment_; MockVehicle *entity_under_test_; OpenScenarioEngine::v1_3::TraveledDistanceCondition::Values condition_values_{.triggeringEntity = "vehicle1", - .value = 10.0}; + .value = 5.0}; }; TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithMockedEntities_WhenCheckingCondition_ThenDoesNotThrow) @@ -61,8 +61,8 @@ TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithSatisfcatoryTrave {mock_environment_}); EXPECT_CALL(*entity_under_test_, GetPosition()) - .WillOnce(Return(TestPosition{0_m, 0_m, 0_m})) - .WillRepeatedly(Return(TestPosition{10_m, 0_m, 0_m})); + .WillOnce(Return(TestPosition{1_m, 1_m, 1_m})) + .WillOnce(Return(TestPosition{4_m, 5_m, 1_m})); EXPECT_THAT(traveled_distance_condition.IsSatisfied(), Eq(false)); // Condition is satisfied after the second call. @@ -75,8 +75,8 @@ TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithUnsatisfcatoryTra {mock_environment_}); EXPECT_CALL(*entity_under_test_, GetPosition()) - .WillOnce(Return(TestPosition{0_m, 0_m, 0_m})) - .WillOnce(Return(TestPosition{1_m, 0_m, 0_m})); + .WillOnce(Return(TestPosition{1_m, 1_m, 1_m})) + .WillOnce(Return(TestPosition{4_m, 4_m, 1_m})); EXPECT_THAT(traveled_distance_condition.IsSatisfied(), Eq(false)); // Condition is still not satisfied after the second call. -- GitLab