Skip to content
Snippets Groups Projects
Commit d1b7dc82 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add missing tests for ASTNodeDataTypeFlattener

parent f4d02278
No related branches found
No related tags found
1 merge request!104Add missing tests for ASTNodeBuiltinFunctionExpressionBuilder
......@@ -40,9 +40,11 @@ ASTNodeDataTypeFlattener::ASTNodeDataTypeFlattener(ASTNode& node, FlattenedDataT
{ASTNodeDataType::build<ASTNodeDataType::type_id_t>(image_sub_domain->m_data_type.nameOfTypeId()), node});
break;
}
// LCOV_EXCL_START
default: {
throw UnexpectedError("invalid data type");
}
// LCOV_EXCL_STOP
}
}
break;
......
......@@ -8,6 +8,9 @@
#include <language/ast/ASTNodeDeclarationToAffectationConverter.hpp>
#include <language/ast/ASTNodeTypeCleaner.hpp>
#include <language/ast/ASTSymbolTableBuilder.hpp>
#include <language/utils/ASTNodeDataTypeTraits.hpp>
#include <language/utils/BasicAffectationRegistrerFor.hpp>
#include <language/utils/TypeDescriptor.hpp>
#include <test_BuiltinFunctionRegister.hpp>
......@@ -106,11 +109,11 @@ f(2);
REQUIRE(&flattened_datatype_list[0].m_parent_node == root_node->children[0].get());
}
SECTION("function evaluation -> N*R*B*string*Z")
SECTION("function evaluation -> N*R*B*string*Z*builtin_t")
{
std::string_view data = R"(
let f: N -> N*R*B*string*Z, n -> (n, 0.5*n, n>2, n, 3-n);
f(2);
let f: N*builtin_t -> N*R*B*string*Z*builtin_t, (n,b) -> (n, 0.5*n, n>2, n, 3-n, b);
f(2, b);
)";
TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"};
......@@ -118,6 +121,21 @@ f(2);
ASTModulesImporter{*root_node};
ASTNodeTypeCleaner<language::import_instruction>{*root_node};
SymbolTable& symbol_table = *root_node->m_symbol_table;
auto [i_symbol, success] = symbol_table.add(builtin_data_type.nameOfTypeId(), root_node->begin());
if (not success) {
throw UnexpectedError("cannot add '" + builtin_data_type.nameOfTypeId() + "' type for testing");
}
i_symbol->attributes().setDataType(ASTNodeDataType::build<ASTNodeDataType::type_name_id_t>());
i_symbol->attributes().setIsInitialized();
i_symbol->attributes().value() = symbol_table.typeEmbedderTable().size();
symbol_table.typeEmbedderTable().add(std::make_shared<TypeDescriptor>(builtin_data_type.nameOfTypeId()));
auto [i_b_symbol, b_success] = symbol_table.add("b", root_node->begin());
i_b_symbol->attributes().setDataType(ast_node_data_type_from<std::shared_ptr<const double>>);
i_b_symbol->attributes().setIsInitialized();
ASTSymbolTableBuilder{*root_node};
ASTNodeDataTypeBuilder{*root_node};
......@@ -133,12 +151,13 @@ f(2);
ASTNodeDataTypeFlattener::FlattenedDataTypeList flattened_datatype_list;
ASTNodeDataTypeFlattener{*root_node->children[0], flattened_datatype_list};
REQUIRE(flattened_datatype_list.size() == 5);
REQUIRE(flattened_datatype_list.size() == 6);
REQUIRE(flattened_datatype_list[0].m_data_type == ASTNodeDataType::unsigned_int_t);
REQUIRE(flattened_datatype_list[1].m_data_type == ASTNodeDataType::double_t);
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);
REQUIRE(flattened_datatype_list[5].m_data_type == ASTNodeDataType::type_id_t);
}
SECTION("function evaluation -> R*R^3")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment