From 0b40832d0ee6fad70d115987c4623ac15328fd25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Fri, 23 Apr 2021 15:28:09 +0200 Subject: [PATCH] Add missing test for ASTNodeDataTypeFlattener --- tests/test_ASTNodeDataTypeFlattener.cpp | 33 +++++++++++++++++++++++++ tests/test_BuiltinFunctionRegister.hpp | 8 ++++++ 2 files changed, 41 insertions(+) diff --git a/tests/test_ASTNodeDataTypeFlattener.cpp b/tests/test_ASTNodeDataTypeFlattener.cpp index c49613ca8..b39880da0 100644 --- a/tests/test_ASTNodeDataTypeFlattener.cpp +++ b/tests/test_ASTNodeDataTypeFlattener.cpp @@ -8,6 +8,8 @@ #include <language/ast/ASTNodeTypeCleaner.hpp> #include <language/ast/ASTSymbolTableBuilder.hpp> +#include <test_BuiltinFunctionRegister.hpp> + #include <pegtl/string_input.hpp> // clazy:excludeall=non-pod-global-static @@ -155,5 +157,36 @@ f(2); REQUIRE(flattened_datatype_list[1].m_data_type == ASTNodeDataType::vector_t); REQUIRE(flattened_datatype_list[1].m_data_type.dimension() == 3); } + + SECTION("builtin_function -> R*R") + { + std::string_view data = R"( +sum_vector(2,3); +)"; + + TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; + auto root_node = ASTBuilder::build(input); + + test_only::test_BuiltinFunctionRegister{*root_node}; + + ASTSymbolTableBuilder{*root_node}; + ASTNodeDataTypeBuilder{*root_node}; + + // optimizations + ASTNodeDeclarationToAffectationConverter{*root_node}; + + ASTNodeTypeCleaner<language::var_declaration>{*root_node}; + ASTNodeTypeCleaner<language::fct_declaration>{*root_node}; + + REQUIRE(root_node->children[0]->is_type<language::function_evaluation>()); + + ASTNodeDataTypeFlattener::FlattenedDataTypeList flattened_datatype_list; + ASTNodeDataTypeFlattener{*root_node->children[0], flattened_datatype_list}; + + REQUIRE(flattened_datatype_list.size() == 2); + REQUIRE(flattened_datatype_list[0].m_data_type == ASTNodeDataType::double_t); + REQUIRE(flattened_datatype_list[1].m_data_type == ASTNodeDataType::vector_t); + REQUIRE(flattened_datatype_list[1].m_data_type.dimension() == 2); + } } } diff --git a/tests/test_BuiltinFunctionRegister.hpp b/tests/test_BuiltinFunctionRegister.hpp index 236219dbe..cb8e4af6b 100644 --- a/tests/test_BuiltinFunctionRegister.hpp +++ b/tests/test_BuiltinFunctionRegister.hpp @@ -159,6 +159,14 @@ class test_BuiltinFunctionRegister std::make_pair("tuple_R33ToR:(R^3x3...)", std::make_shared<BuiltinFunctionEmbedder<double(const std::vector<TinyMatrix<3>>)>>( [](const std::vector<TinyMatrix<3>>&) -> double { return 0; }))); + + m_name_builtin_function_map.insert( + std::make_pair("sum_vector:R*R^2", + std::make_shared< + BuiltinFunctionEmbedder<std::tuple<double, TinyVector<2>>(const double, const double)>>( + [](const double& x, const double& y) -> std::tuple<double, TinyVector<2>> { + return std::make_tuple(x + y, TinyVector<2>{x, y}); + }))); } void -- GitLab