diff --git a/rclcpp/test/rclcpp/test_node.cpp b/rclcpp/test/rclcpp/test_node.cpp index 25bc5afaca..cf9f6c6b02 100644 --- a/rclcpp/test/rclcpp/test_node.cpp +++ b/rclcpp/test/rclcpp/test_node.cpp @@ -1752,6 +1752,27 @@ TEST_F(TestNode, set_parameter_undeclared_parameters_not_allowed) { EXPECT_FALSE(node->set_parameter(rclcpp::Parameter(name, nan)).successful); EXPECT_EQ(node->get_parameter(name).get_value(), 50.0); } + { + // setting a parameter to non-finite values with floating point range descriptor + auto name = "parameter"_unq; + rcl_interfaces::msg::ParameterDescriptor descriptor; + descriptor.floating_point_range.resize(1); + auto & floating_point_range = descriptor.floating_point_range.at(0); + constexpr double inf = std::numeric_limits::infinity(); + constexpr double nan = std::numeric_limits::quiet_NaN(); + floating_point_range.from_value = 0.0; + floating_point_range.to_value = inf; + floating_point_range.step = 0.0; + node->declare_parameter(name, 50.0, descriptor); + EXPECT_EQ(node->get_parameter(name).get_value(), 50.0); + + EXPECT_TRUE(node->set_parameter(rclcpp::Parameter(name, inf)).successful); + EXPECT_EQ(node->get_parameter(name).get_value(), inf); + EXPECT_FALSE(node->set_parameter(rclcpp::Parameter(name, -inf)).successful); + EXPECT_EQ(node->get_parameter(name).get_value(), inf); + EXPECT_FALSE(node->set_parameter(rclcpp::Parameter(name, nan)).successful); + EXPECT_EQ(node->get_parameter(name).get_value(), inf); + } { // setting an array parameter with floating point range descriptor auto name = "parameter"_unq;