@@ -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+
26172774void expect_qos_profile_eq (
26182775 const rmw_qos_profile_t & qos1, const rmw_qos_profile_t & qos2, bool is_publisher)
26192776{
0 commit comments