* Fix yaml parser error when meets .nan Signed-off-by: Ada-King <Bingtao.Du@sony.com> Correct code style Signed-off-by: Ada-King <Bingtao.Du@sony.com> Modify as suggested Signed-off-by: Ada-King <Bingtao.Du@sony.com> Improve test Signed-off-by: Ada-King <Bingtao.Du@sony.com> Fix minor flaw Signed-off-by: Ada-King <Bingtao.Du@sony.com> Fix minor flaw again Signed-off-by: Ada-King <Bingtao.Du@sony.com> Satisfy windows CI Signed-off-by: Ada-King <Bingtao.Du@sony.com> Change the match rule for special float Signed-off-by: Ada-King <Bingtao.Du@sony.com> Distinguish +.inf and -.inf Signed-off-by: Ada-King <Bingtao.Du@sony.com> * Remove unnecessary #include change. Signed-off-by: Chris Lalancette <clalancette@openrobotics.org> * Add in two more necessary includes. Signed-off-by: Chris Lalancette <clalancette@openrobotics.org> Co-authored-by: Ada-King <Bingtao.Du@sony.com> Co-authored-by: Chris Lalancette <clalancette@openrobotics.org> Signed-off-by: Stephen Brawner <brawner@gmail.com> Co-authored-by: Ada-King <Bingtao.Du@sony.com> Co-authored-by: Chris Lalancette <clalancette@openrobotics.org>
This commit is contained in:
		
							parent
							
								
									2c513aa0ed
								
							
						
					
					
						commit
						7c1f2746f4
					
				
					 3 changed files with 80 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -12,9 +12,10 @@
 | 
			
		|||
// See the License for the specific language governing permissions and
 | 
			
		||||
// limitations under the License.
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <gtest/gtest.h>
 | 
			
		||||
 | 
			
		||||
#include <cmath>
 | 
			
		||||
 | 
			
		||||
#include "osrf_testing_tools_cpp/scope_exit.hpp"
 | 
			
		||||
 | 
			
		||||
#include "rcl_yaml_param_parser/parser.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -497,6 +498,53 @@ TEST(test_file_parser, maximum_number_parameters) {
 | 
			
		|||
  // No cleanup, rcl_parse_yaml_file takes care of that if it fails.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Test special float point(https://github.com/ros2/rcl/issues/555).
 | 
			
		||||
TEST(test_file_parser, special_float_point) {
 | 
			
		||||
  rcutils_reset_error();
 | 
			
		||||
  EXPECT_TRUE(rcutils_get_cwd(cur_dir, 1024)) << rcutils_get_error_string().str;
 | 
			
		||||
  rcutils_allocator_t allocator = rcutils_get_default_allocator();
 | 
			
		||||
  char * test_path = rcutils_join_path(cur_dir, "test", allocator);
 | 
			
		||||
  ASSERT_TRUE(NULL != test_path) << rcutils_get_error_string().str;
 | 
			
		||||
  OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT(
 | 
			
		||||
  {
 | 
			
		||||
    allocator.deallocate(test_path, allocator.state);
 | 
			
		||||
  });
 | 
			
		||||
  char * path = rcutils_join_path(test_path, "special_float.yaml", allocator);
 | 
			
		||||
  ASSERT_TRUE(NULL != path) << rcutils_get_error_string().str;
 | 
			
		||||
  OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT(
 | 
			
		||||
  {
 | 
			
		||||
    allocator.deallocate(path, allocator.state);
 | 
			
		||||
  });
 | 
			
		||||
  ASSERT_TRUE(rcutils_exists(path)) << "No test YAML file found at " << path;
 | 
			
		||||
  rcl_params_t * params_hdl = rcl_yaml_node_struct_init(allocator);
 | 
			
		||||
  ASSERT_TRUE(NULL != params_hdl) << rcutils_get_error_string().str;
 | 
			
		||||
  OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT(
 | 
			
		||||
  {
 | 
			
		||||
    rcl_yaml_node_struct_fini(params_hdl);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  bool res = rcl_parse_yaml_file(path, params_hdl);
 | 
			
		||||
  EXPECT_TRUE(res) << rcutils_get_error_string().str;
 | 
			
		||||
  rcl_variant_t * param_value = rcl_yaml_node_struct_get("test_node", "isstring", params_hdl);
 | 
			
		||||
  ASSERT_TRUE(NULL != param_value) << rcutils_get_error_string().str;
 | 
			
		||||
  ASSERT_TRUE(NULL != param_value->string_array_value);
 | 
			
		||||
  EXPECT_STREQ(".nananan", param_value->string_array_value->data[1]);
 | 
			
		||||
  EXPECT_STREQ(".nAN", param_value->string_array_value->data[2]);
 | 
			
		||||
  EXPECT_STREQ(".infinf", param_value->string_array_value->data[4]);
 | 
			
		||||
  EXPECT_STREQ(".INf", param_value->string_array_value->data[5]);
 | 
			
		||||
  param_value = rcl_yaml_node_struct_get(
 | 
			
		||||
    "test_node", "nan_inf", params_hdl);
 | 
			
		||||
  ASSERT_TRUE(NULL != param_value) << rcutils_get_error_string().str;
 | 
			
		||||
  ASSERT_TRUE(NULL != param_value->double_array_value);
 | 
			
		||||
  ASSERT_EQ(7U, param_value->double_array_value->size);
 | 
			
		||||
  EXPECT_FALSE(std::isnan(param_value->double_array_value->values[1]));
 | 
			
		||||
  EXPECT_TRUE(std::isnan(param_value->double_array_value->values[2]));
 | 
			
		||||
  EXPECT_TRUE(std::isnan(param_value->double_array_value->values[3]));
 | 
			
		||||
  EXPECT_TRUE(std::isinf(param_value->double_array_value->values[4]));
 | 
			
		||||
  EXPECT_TRUE(std::isinf(param_value->double_array_value->values[5]));
 | 
			
		||||
  EXPECT_TRUE(std::isinf(param_value->double_array_value->values[6]));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int32_t main(int32_t argc, char ** argv)
 | 
			
		||||
{
 | 
			
		||||
  ::testing::InitGoogleTest(&argc, argv);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue