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