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