Skip to content

Commit 152dbc6

Browse files
authored
Add tests for function templates of declare_parameter (#1747)
* Add function template tests for all defined types of declare_parameter Signed-off-by: Nico Neumann <[email protected]>
1 parent 9342c25 commit 152dbc6

File tree

1 file changed

+157
-0
lines changed

1 file changed

+157
-0
lines changed

rclcpp/test/rclcpp/test_node.cpp

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2614,6 +2614,163 @@ TEST_F(TestNode, declare_parameter_with_vector) {
26142614
}
26152615
}
26162616

2617+
// test non-array data types for declare parameter function templates that are explicitly defined
2618+
TEST_F(TestNode, declare_parameter_allowed_simple_types_function_templates) {
2619+
auto node = std::make_shared<rclcpp::Node>(
2620+
"test_declare_parameter_allowed_simple_types_function_templates"_unq);
2621+
{
2622+
// declare parameter and then get types to check
2623+
auto name1 = "parameter"_unq;
2624+
auto name2 = "parameter"_unq;
2625+
auto name3 = "parameter"_unq;
2626+
auto name4 = "parameter"_unq;
2627+
auto name5 = "parameter"_unq;
2628+
auto name6 = "parameter"_unq;
2629+
auto name7 = "parameter"_unq;
2630+
2631+
node->declare_parameter<bool>(name1, false);
2632+
node->declare_parameter<int>(name2, 1234);
2633+
node->declare_parameter<int64_t>(name3, 12340);
2634+
node->declare_parameter<float>(name4, static_cast<float>(12.34));
2635+
node->declare_parameter<double>(name5, 12.34); // called float64 in ros2 design parameters page
2636+
node->declare_parameter<std::string>(name6, "test string");
2637+
auto str = "test param";
2638+
node->declare_parameter<const char *>(name7, str);
2639+
2640+
EXPECT_TRUE(node->has_parameter(name1));
2641+
EXPECT_TRUE(node->has_parameter(name2));
2642+
EXPECT_TRUE(node->has_parameter(name3));
2643+
EXPECT_TRUE(node->has_parameter(name4));
2644+
EXPECT_TRUE(node->has_parameter(name5));
2645+
EXPECT_TRUE(node->has_parameter(name6));
2646+
EXPECT_TRUE(node->has_parameter(name7));
2647+
2648+
auto results = node->get_parameter_types({name1, name2, name3, name4, name5, name6, name7});
2649+
EXPECT_EQ(results.size(), 7u);
2650+
EXPECT_EQ(results[0], rcl_interfaces::msg::ParameterType::PARAMETER_BOOL);
2651+
EXPECT_EQ(results[1], rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER);
2652+
EXPECT_EQ(results[2], rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER);
2653+
EXPECT_EQ(results[3], rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE);
2654+
EXPECT_EQ(results[4], rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE);
2655+
EXPECT_EQ(results[5], rcl_interfaces::msg::ParameterType::PARAMETER_STRING);
2656+
EXPECT_EQ(results[6], rcl_interfaces::msg::ParameterType::PARAMETER_STRING);
2657+
}
2658+
{
2659+
// declare parameter and then get values to check
2660+
auto name1 = "parameter"_unq;
2661+
auto name2 = "parameter"_unq;
2662+
auto name3 = "parameter"_unq;
2663+
auto name4 = "parameter"_unq;
2664+
auto name5 = "parameter"_unq;
2665+
auto name6 = "parameter"_unq;
2666+
auto name7 = "parameter"_unq;
2667+
2668+
node->declare_parameter<bool>(name1, false);
2669+
node->declare_parameter<int>(name2, 4321);
2670+
node->declare_parameter<int64_t>(name3, 43210);
2671+
node->declare_parameter<float>(name4, static_cast<float>(43.21));
2672+
node->declare_parameter<double>(name5, 12.34); // called float64 in ros2 design parameters page
2673+
node->declare_parameter<std::string>(name6, "test string");
2674+
auto str = "test param";
2675+
node->declare_parameter<const char *>(name7, str);
2676+
2677+
std::vector<rclcpp::Parameter> expected = {
2678+
{name1, false},
2679+
{name2, 4321},
2680+
{name3, 43210},
2681+
{name4, static_cast<float>(43.21)},
2682+
{name5, 12.34},
2683+
{name6, "test string"},
2684+
{name7, str}
2685+
};
2686+
EXPECT_EQ(node->get_parameters({name1, name2, name3, name4, name5, name6, name7}), expected);
2687+
}
2688+
}
2689+
2690+
// test array data types for declare parameter function templates that are explicitly defined
2691+
TEST_F(TestNode, declare_parameter_allowed_array_types_function_templates) {
2692+
auto node = std::make_shared<rclcpp::Node>(
2693+
"test_declare_parameter_allowed_array_types_function_templates"_unq);
2694+
{
2695+
// declare parameter and then get types to check
2696+
auto name1 = "parameter"_unq;
2697+
auto name2 = "parameter"_unq;
2698+
auto name3 = "parameter"_unq;
2699+
auto name4 = "parameter"_unq;
2700+
auto name5 = "parameter"_unq;
2701+
auto name6 = "parameter"_unq;
2702+
auto name7 = "parameter"_unq;
2703+
2704+
node->declare_parameter<std::vector<uint8_t>>(name1, std::vector<uint8_t>{3, 4, 5, 7, 9});
2705+
node->declare_parameter<std::vector<bool>>(name2, std::vector<bool>{false, true});
2706+
node->declare_parameter<std::vector<int>>(name3, std::vector<int>{1234, 2345});
2707+
node->declare_parameter<std::vector<int64_t>>(name4, std::vector<int64_t>{12340, 9876});
2708+
node->declare_parameter<std::vector<float>>(
2709+
name5, std::vector<float>{static_cast<float>(12.34),
2710+
static_cast<float>(98.78)});
2711+
node->declare_parameter<std::vector<double>>(
2712+
name6,
2713+
std::vector<double>{12.34, 55.66}); // called float64 in ros2 design parameters page
2714+
node->declare_parameter<std::vector<std::string>>(
2715+
name7, std::vector<std::string>{"test string",
2716+
"another test str"});
2717+
2718+
EXPECT_TRUE(node->has_parameter(name1));
2719+
EXPECT_TRUE(node->has_parameter(name2));
2720+
EXPECT_TRUE(node->has_parameter(name3));
2721+
EXPECT_TRUE(node->has_parameter(name4));
2722+
EXPECT_TRUE(node->has_parameter(name5));
2723+
EXPECT_TRUE(node->has_parameter(name6));
2724+
EXPECT_TRUE(node->has_parameter(name7));
2725+
2726+
auto results = node->get_parameter_types({name1, name2, name3, name4, name5, name6, name7});
2727+
EXPECT_EQ(results.size(), 7u);
2728+
EXPECT_EQ(results[0], rcl_interfaces::msg::ParameterType::PARAMETER_BYTE_ARRAY);
2729+
EXPECT_EQ(results[1], rcl_interfaces::msg::ParameterType::PARAMETER_BOOL_ARRAY);
2730+
EXPECT_EQ(results[2], rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER_ARRAY);
2731+
EXPECT_EQ(results[3], rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER_ARRAY);
2732+
EXPECT_EQ(results[4], rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE_ARRAY);
2733+
EXPECT_EQ(results[5], rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE_ARRAY);
2734+
EXPECT_EQ(results[6], rcl_interfaces::msg::ParameterType::PARAMETER_STRING_ARRAY);
2735+
}
2736+
{
2737+
// declare parameter and then get values to check
2738+
auto name1 = "parameter"_unq;
2739+
auto name2 = "parameter"_unq;
2740+
auto name3 = "parameter"_unq;
2741+
auto name4 = "parameter"_unq;
2742+
auto name5 = "parameter"_unq;
2743+
auto name6 = "parameter"_unq;
2744+
auto name7 = "parameter"_unq;
2745+
2746+
std::vector<uint8_t> byte_arr = {0xD, 0xE, 0xA, 0xD};
2747+
node->declare_parameter<std::vector<uint8_t>>(name1, byte_arr);
2748+
node->declare_parameter<std::vector<bool>>(name2, std::vector<bool>{true, false, true});
2749+
node->declare_parameter<std::vector<int>>(name3, std::vector<int>{22, 33, 55, 77});
2750+
node->declare_parameter<std::vector<int64_t>>(name4, std::vector<int64_t>{456, 765});
2751+
node->declare_parameter<std::vector<float>>(
2752+
name5, std::vector<float>{static_cast<float>(99.11),
2753+
static_cast<float>(11.99)});
2754+
node->declare_parameter<std::vector<double>>(
2755+
name6,
2756+
std::vector<double>{12.21, 55.55, 98.89}); // called float64 in ros2 design parameters page
2757+
node->declare_parameter<std::vector<std::string>>(
2758+
name7, std::vector<std::string>{"ros2",
2759+
"colcon", "ignition"});
2760+
2761+
std::vector<rclcpp::Parameter> expected = {
2762+
{name1, std::vector<uint8_t>{0xD, 0xE, 0xA, 0xD}},
2763+
{name2, std::vector<bool>{true, false, true}},
2764+
{name3, std::vector<int>{22, 33, 55, 77}},
2765+
{name4, std::vector<int64_t>{456, 765}},
2766+
{name5, std::vector<float>{static_cast<float>(99.11), static_cast<float>(11.99)}},
2767+
{name6, std::vector<double>{12.21, 55.55, 98.89}},
2768+
{name7, std::vector<std::string>{"ros2", "colcon", "ignition"}}
2769+
};
2770+
EXPECT_EQ(node->get_parameters({name1, name2, name3, name4, name5, name6, name7}), expected);
2771+
}
2772+
}
2773+
26172774
void expect_qos_profile_eq(
26182775
const rmw_qos_profile_t & qos1, const rmw_qos_profile_t & qos2, bool is_publisher)
26192776
{

0 commit comments

Comments
 (0)