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

Add tests for ASTNodeDeclarationCleaner

parent 9fac6605
No related branches found
No related tags found
1 merge request!37Feature/language
......@@ -10,6 +10,7 @@ add_executable (unit_tests
test_ASTNodeDataType.cpp
test_ASTNodeDataTypeBuilder.cpp
test_ASTNodeDataTypeChecker.cpp
test_ASTNodeDeclarationCleaner.cpp
test_ASTNodeDeclarationToAffectationConverter.cpp
test_ASTNodeJumpPlacementChecker.cpp
test_ASTNodeValueBuilder.cpp
......
#include <catch2/catch.hpp>
#include <ASTNodeValueBuilder.hpp>
#include <ASTBuilder.hpp>
#include <ASTNodeDataTypeBuilder.hpp>
#include <ASTNodeDeclarationCleaner.hpp>
#include <ASTSymbolTableBuilder.hpp>
#include <ASTPrinter.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>); \
\
string_input input{data, "test.pgs"}; \
auto ast = ASTBuilder::build(input); \
\
ASTSymbolTableBuilder{*ast}; \
ASTNodeDataTypeBuilder{*ast}; \
ASTNodeValueBuilder{*ast}; \
\
ASTNodeDeclarationCleaner{*ast}; \
\
std::stringstream ast_output; \
ast_output << '\n' << ASTPrinter{*ast, ASTPrinter::Format::raw, {ASTPrinter::Info::none}}; \
\
REQUIRE(ast_output.str() == expected_output); \
}
TEST_CASE("ASTNodeDeclarationCleaner", "[language]")
{
SECTION("no declaration")
{
std::string_view data = R"(
cout << "two=" << 2 << "\n";
)";
std::string_view result = R"(
(root)
`-(language::cout_kw)
+-(language::literal:"two=")
+-(language::integer:2)
`-(language::literal:"\n")
)";
CHECK_AST(data, result);
}
SECTION("single declaration")
{
std::string_view data = R"(
R z;
z = 1;
)";
std::string_view result = R"(
(root)
`-(language::eq_op)
+-(language::name:z)
`-(language::integer:1)
)";
CHECK_AST(data, result);
}
SECTION("multiple declaration")
{
std::string_view data = R"(
Z z;
z = 1;
if (true) {
R x;
x = 0.5 *z;
}
)";
std::string_view result = R"(
(root)
+-(language::eq_op)
| +-(language::name:z)
| `-(language::integer:1)
`-(language::if_statement)
+-(language::true_kw)
`-(language::bloc)
`-(language::eq_op)
+-(language::name:x)
`-(language::multiply_op)
+-(language::real:0.5)
`-(language::name:z)
)";
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