Select Git revision
MeshFlatNodeBoundary.cpp
test_ASTNodeDeclarationToAffectationConverter.cpp 3.60 KiB
#include <catch2/catch.hpp>
#include <ASTNodeValueBuilder.hpp>
#include <ASTBuilder.hpp>
#include <ASTNodeDataTypeBuilder.hpp>
#include <ASTNodeDeclarationToAffectationConverter.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}; \
\
ASTNodeDeclarationToAffectationConverter{*ast}; \
\
std::stringstream ast_output; \
ast_output << '\n' << ASTPrinter{*ast, ASTPrinter::Format::raw, {ASTPrinter::Info::none}}; \
\
REQUIRE(ast_output.str() == expected_output); \
}
TEST_CASE("ASTNodeDeclarationToAffectationConverter", "[language]")
{
SECTION("nothing to convert")
{
std::string_view data = R"(
R z;
)";
std::string_view result = R"(
(root)
`-(language::declaration)
+-(language::R_set)
`-(language::name:z)
)";
CHECK_AST(data, result);
}
SECTION("simple constructor")
{
std::string_view data = R"(
R z = 0;
)";
std::string_view result = R"(
(root)
`-(language::eq_op)
+-(language::name:z)
`-(language::integer:0)
)";
CHECK_AST(data, result);
}
SECTION("complex constructors")
{
std::string_view data = R"(