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

Add tests for ASTNodeFunctionEvaluationExpressionBuilder

parent b77c220c
No related branches found
No related tags found
1 merge request!37Feature/language
......@@ -19,8 +19,10 @@ ASTNodeFunctionEvaluationExpressionBuilder::ASTNodeFunctionEvaluationExpressionB
ASTNodeCFunctionExpressionBuilder{node};
break;
}
// LCOV_EXCL_START
default: {
throw parse_error("unexpected function type", node.begin());
}
// LCOV_EXCL_STOP
}
}
......@@ -18,6 +18,7 @@ add_executable (unit_tests
test_ASTNodeDataTypeChecker.cpp
test_ASTNodeDeclarationToAffectationConverter.cpp
test_ASTNodeExpressionBuilder.cpp
test_ASTNodeFunctionEvaluationExpressionBuilder.cpp
test_ASTNodeIncDecExpressionBuilder.cpp
test_ASTNodeJumpPlacementChecker.cpp
test_ASTNodeListProcessor.cpp
......
#include <catch2/catch.hpp>
#include <ASTNodeValueBuilder.hpp>
#include <ASTBuilder.hpp>
#include <ASTNodeDataTypeBuilder.hpp>
#include <ASTModulesImporter.hpp>
#include <ASTNodeExpressionBuilder.hpp>
#include <ASTNodeFunctionEvaluationExpressionBuilder.hpp>
#include <ASTNodeTypeCleaner.hpp>
#include <ASTSymbolTableBuilder.hpp>
#include <ASTPrinter.hpp>
#include <PEGGrammar.hpp>
#include <Demangle.hpp>
#define CHECK_AST(data, expected_output) \
{ \
static_assert(std::is_same_v<std::decay_t<decltype(data)>, std::string_view>); \
static_assert((std::is_same_v<std::decay_t<decltype(expected_output)>, std::string_view>) or \
(std::is_same_v<std::decay_t<decltype(expected_output)>, std::string>)); \
\
string_input input{data, "test.pgs"}; \
auto ast = ASTBuilder::build(input); \
\
ASTModulesImporter{*ast}; \
ASTNodeTypeCleaner<language::import_instruction>{*ast}; \
\
ASTSymbolTableBuilder{*ast}; \
ASTNodeDataTypeBuilder{*ast}; \
ASTNodeValueBuilder{*ast}; \
\
ASTNodeTypeCleaner<language::let_declaration>{*ast}; \
\
ASTNodeExpressionBuilder{*ast}; \
std::stringstream ast_output; \
ast_output << '\n' << ASTPrinter{*ast, ASTPrinter::Format::raw, {ASTPrinter::Info::exec_type}}; \
\
REQUIRE(ast_output.str() == expected_output); \
}
TEST_CASE("ASTNodeFunctionEvaluationExpressionBuilder", "[language]")
{
SECTION("C function evaluation")
{
std::string_view data = R"(
import math;
sin(3);
)";
std::string_view result = R"(
(root:ASTNodeListProcessor)
`-(language::function_evaluation:CFunctionProcessor)
+-(language::name:sin:NameProcessor)
`-(language::integer:3:FakeProcessor)
)";
CHECK_AST(data, result);
}
SECTION("function evaluation")
{
std::string_view data = R"(
let sum : R*R -> R, (x,y) -> x+y;
sum(1,2);
)";
std::string_view result = R"(
(root:ASTNodeListProcessor)
`-(language::function_evaluation:FunctionProcessor)
+-(language::name:sum:NameProcessor)
`-(language::function_argument_list:FakeProcessor)
+-(language::integer:1:FakeProcessor)
`-(language::integer:2:FakeProcessor)
)";
CHECK_AST(data, result);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment