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

Add missing tests for ASTNodeBuiltinFunctionExpressionBuilder

Also remove the treatment of tuple of function arguments, since this
kind of argument cannot be defined in the language (by now?).
parent baecb977
No related branches found
No related tags found
1 merge request!104Add missing tests for ASTNodeBuiltinFunctionExpressionBuilder
This commit is part of merge request !104. Comments created here will be created in the context of that merge request.
...@@ -231,9 +231,6 @@ ASTNodeBuiltinFunctionExpressionBuilder::_getArgumentConverter(const ASTNodeData ...@@ -231,9 +231,6 @@ ASTNodeBuiltinFunctionExpressionBuilder::_getArgumentConverter(const ASTNodeData
} }
case ASTNodeDataType::double_t: { case ASTNodeDataType::double_t: {
return std::make_unique<FunctionTupleArgumentConverter<ParameterContentT, double>>(argument_number); return std::make_unique<FunctionTupleArgumentConverter<ParameterContentT, double>>(argument_number);
}
case ASTNodeDataType::function_t: {
return std::make_unique<FunctionTupleArgumentConverter<ParameterContentT, FunctionSymbolId>>(argument_number);
} }
// LCOV_EXCL_START // LCOV_EXCL_START
default: { default: {
...@@ -513,11 +510,13 @@ ASTNodeBuiltinFunctionExpressionBuilder::_buildArgumentProcessors( ...@@ -513,11 +510,13 @@ ASTNodeBuiltinFunctionExpressionBuilder::_buildArgumentProcessors(
const size_t parameters_number = parameter_type_list.size(); const size_t parameters_number = parameter_type_list.size();
if (arguments_number != parameters_number) { if (arguments_number != parameters_number) {
// LCOV_EXCL_START
std::ostringstream error_message; std::ostringstream error_message;
error_message << "bad number of arguments: expecting " << rang::fgB::yellow << parameters_number error_message << "bad number of arguments: expecting " << rang::fgB::yellow << parameters_number
<< rang::style::reset << rang::style::bold << ", provided " << rang::fgB::yellow << arguments_number << rang::style::reset << rang::style::bold << ", provided " << rang::fgB::yellow << arguments_number
<< rang::style::reset; << rang::style::reset;
throw ParseError(error_message.str(), argument_nodes.begin()); throw UnexpectedError(error_message.str());
// LCOV_EXCL_STOP
} }
for (size_t i = 0; i < arguments_number; ++i) { for (size_t i = 0; i < arguments_number; ++i) {
......
...@@ -1664,6 +1664,42 @@ fidToR(f); ...@@ -1664,6 +1664,42 @@ fidToR(f);
CHECK_AST(data, result); CHECK_AST(data, result);
} }
SECTION("tuple(FunctionSymbolId) -> R")
{
std::string_view data = R"(
let f : R^3 -> R, x -> 0;
fidTupleToR((f,f));
)";
std::string_view result = R"(
(root:ASTNodeListProcessor)
`-(language::function_evaluation:BuiltinFunctionProcessor)
+-(language::name:fidTupleToR:FakeProcessor)
`-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor>)
+-(language::name:f:NameProcessor)
`-(language::name:f:NameProcessor)
)";
CHECK_AST(data, result);
}
SECTION("tuple(FunctionSymbolId) -> R [with single value tuple]")
{
std::string_view data = R"(
let f : R^3 -> R, x -> 0;
fidTupleToR(f);
)";
std::string_view result = R"(
(root:ASTNodeListProcessor)
`-(language::function_evaluation:BuiltinFunctionProcessor)
+-(language::name:fidTupleToR:FakeProcessor)
`-(language::name:f:NameProcessor)
)";
CHECK_AST(data, result);
}
} }
SECTION("errors") SECTION("errors")
......
...@@ -100,6 +100,11 @@ class test_BuiltinFunctionRegister ...@@ -100,6 +100,11 @@ class test_BuiltinFunctionRegister
std::make_pair("fidToR:function", std::make_shared<BuiltinFunctionEmbedder<double(const FunctionSymbolId&)>>( std::make_pair("fidToR:function", std::make_shared<BuiltinFunctionEmbedder<double(const FunctionSymbolId&)>>(
[](const FunctionSymbolId&) -> double { return 0; }))); [](const FunctionSymbolId&) -> double { return 0; })));
m_name_builtin_function_map.insert(
std::make_pair("fidTupleToR:(function...)",
std::make_shared<BuiltinFunctionEmbedder<double(const std::vector<FunctionSymbolId>)>>(
[](const std::vector<FunctionSymbolId>&) -> double { return 0; })));
m_name_builtin_function_map.insert( m_name_builtin_function_map.insert(
std::make_pair("builtinToBuiltin:builtin_t", std::make_pair("builtinToBuiltin:builtin_t",
std::make_shared< std::make_shared<
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment