From 218f09050d13093f2ceaffc0a4271876db299aba Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Mon, 10 Feb 2020 15:18:57 +0100
Subject: [PATCH] Add missing R^d test for ASTNodeDataTypeFlattener

Also removed useless ASTPrinter calls
---
 tests/test_ASTNodeDataTypeFlattener.cpp | 44 ++++++++++++++++---------
 1 file changed, 29 insertions(+), 15 deletions(-)

diff --git a/tests/test_ASTNodeDataTypeFlattener.cpp b/tests/test_ASTNodeDataTypeFlattener.cpp
index bd942da83..0ffd646cb 100644
--- a/tests/test_ASTNodeDataTypeFlattener.cpp
+++ b/tests/test_ASTNodeDataTypeFlattener.cpp
@@ -10,8 +10,6 @@
 
 #include <ASTNodeTypeCleaner.hpp>
 
-#include <ASTPrinter.hpp>
-
 #include <PEGGrammar.hpp>
 
 TEST_CASE("ASTNodeDataTypeFlattener", "[language]")
@@ -31,9 +29,6 @@ b;
       ASTSymbolTableBuilder{*root_node};
       ASTNodeDataTypeBuilder{*root_node};
 
-      std::stringstream ast_output;
-      ast_output << '\n' << ASTPrinter{*root_node, ASTPrinter::Format::raw, {ASTPrinter::Info::none}};
-
       REQUIRE(root_node->children[1]->is_type<language::name>());
 
       ASTNodeDataTypeFlattener::FlattenedDataTypeList flattened_datatype_list;
@@ -57,9 +52,6 @@ n;
       ASTSymbolTableBuilder{*root_node};
       ASTNodeDataTypeBuilder{*root_node};
 
-      std::stringstream ast_output;
-      ast_output << '\n' << ASTPrinter{*root_node, ASTPrinter::Format::raw, {ASTPrinter::Info::none}};
-
       REQUIRE(root_node->children[1]->is_type<language::name>());
 
       ASTNodeDataTypeFlattener::FlattenedDataTypeList flattened_datatype_list;
@@ -92,9 +84,6 @@ f(2);
       ASTNodeTypeCleaner<language::declaration>{*root_node};
       ASTNodeTypeCleaner<language::let_declaration>{*root_node};
 
-      std::stringstream ast_output;
-      ast_output << '\n' << ASTPrinter{*root_node, ASTPrinter::Format::raw, {ASTPrinter::Info::none}};
-
       REQUIRE(root_node->children[0]->is_type<language::function_evaluation>());
 
       ASTNodeDataTypeFlattener::FlattenedDataTypeList flattened_datatype_list;
@@ -124,9 +113,6 @@ f(2);
       ASTNodeTypeCleaner<language::declaration>{*root_node};
       ASTNodeTypeCleaner<language::let_declaration>{*root_node};
 
-      std::stringstream ast_output;
-      ast_output << '\n' << ASTPrinter{*root_node, ASTPrinter::Format::raw, {ASTPrinter::Info::none}};
-
       REQUIRE(root_node->children[0]->is_type<language::function_evaluation>());
 
       ASTNodeDataTypeFlattener::FlattenedDataTypeList flattened_datatype_list;
@@ -138,8 +124,36 @@ f(2);
       REQUIRE(flattened_datatype_list[2].m_data_type == ASTNodeDataType::bool_t);
       REQUIRE(flattened_datatype_list[3].m_data_type == ASTNodeDataType::string_t);
       REQUIRE(flattened_datatype_list[4].m_data_type == ASTNodeDataType::int_t);
+    }
+
+    SECTION("function evaluation -> R*R^3")
+    {
+      std::string_view data = R"(
+let f: R -> R*R^3, x -> (0.5*x, (x, x+1, x-1));
+f(2);
+)";
+
+      string_input input{data, "test.pgs"};
+      auto root_node = ASTBuilder::build(input);
+
+      ASTSymbolTableBuilder{*root_node};
+      ASTNodeDataTypeBuilder{*root_node};
+
+      // optimizations
+      ASTNodeDeclarationToAffectationConverter{*root_node};
+
+      ASTNodeTypeCleaner<language::declaration>{*root_node};
+      ASTNodeTypeCleaner<language::let_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[0].m_parent_node == root_node->children[0].get());
+      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() == 3);
     }
   }
 }
-- 
GitLab