From 19bfaf2b58060d2d3227e3200bd833d9e9b08e1c Mon Sep 17 00:00:00 2001 From: David Sobek Date: Fri, 24 Apr 2026 13:25:28 -0600 Subject: [PATCH] Handle empty vector toStr case --- include/behaviortree_cpp/basic_types.h | 4 ++++ tests/gtest_ports.cpp | 19 +++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/include/behaviortree_cpp/basic_types.h b/include/behaviortree_cpp/basic_types.h index 5907d846f..9e266022c 100644 --- a/include/behaviortree_cpp/basic_types.h +++ b/include/behaviortree_cpp/basic_types.h @@ -281,6 +281,10 @@ template { try { + if(value.empty()) + { + return ""; + } using InnerType = typename is_vector::ValueType; std::stringstream ss; for(auto it = value.begin(); it != --value.end(); ++it) diff --git a/tests/gtest_ports.cpp b/tests/gtest_ports.cpp index cbe644aaf..50e05ad7f 100644 --- a/tests/gtest_ports.cpp +++ b/tests/gtest_ports.cpp @@ -6,13 +6,28 @@ using namespace BT; -TEST(toStr, ConvertsVectors) +TEST(toStr, ConvertsIntVector) { std::string val_str; - ASSERT_NO_THROW(val_str = BT::toStr(std::vector{ 1, 2, 3, 4 })); + ASSERT_NO_THROW(val_str = toStr(std::vector{ 1, 2, 3, 4 })); EXPECT_EQ(val_str, "1;2;3;4"); } +TEST(toStr, ConvertsStringVector) +{ + std::string val_str; + ASSERT_NO_THROW(val_str = + toStr(std::vector{ "hello", "", " ", "world", "!" })); + EXPECT_EQ(val_str, "hello;; ;world;!"); +} + +TEST(toStr, ConvertsEmptyVector) +{ + std::string val_str; + ASSERT_NO_THROW(val_str = toStr(std::vector{})); + EXPECT_EQ(val_str, ""); +} + class NodeWithPorts : public SyncActionNode { public: