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

Add affectation operators and if statement node type tests

parent eab39a8a
No related branches found
No related tags found
1 merge request!37Feature/language
......@@ -256,4 +256,276 @@ break;
CHECK_AST(data, result);
}
SECTION("eq_op")
{
std::string_view data = R"(
N a;
a = 1;
)";
std::string_view result = R"(
(root:void)
+-(language::declaration:N)
| +-(language::N_set:void)
| `-(language::name:a:N)
`-(language::eq_op:N)
+-(language::name:a:N)
`-(language::integer:1:Z)
)";
CHECK_AST(data, result);
}
SECTION("multiplyeq_op")
{
std::string_view data = R"(
N a = 1;
a *= 1.2;
)";
std::string_view result = R"(
(root:void)
+-(language::declaration:N)
| +-(language::N_set:void)
| +-(language::name:a:N)
| `-(language::integer:1:Z)
`-(language::multiplyeq_op:N)
+-(language::name:a:N)
`-(language::real:1.2:R)
)";
CHECK_AST(data, result);
}
SECTION("divideeq_op")
{
std::string_view data = R"(
R a = 3;
a /= 2;
)";
std::string_view result = R"(
(root:void)
+-(language::declaration:R)
| +-(language::R_set:void)
| +-(language::name:a:R)
| `-(language::integer:3:Z)
`-(language::divideeq_op:R)
+-(language::name:a:R)
`-(language::integer:2:Z)
)";
CHECK_AST(data, result);
}
SECTION("pluseq_op")
{
std::string_view data = R"(
Z a = 3;
a += 2;
)";
std::string_view result = R"(
(root:void)
+-(language::declaration:Z)
| +-(language::Z_set:void)
| +-(language::name:a:Z)
| `-(language::integer:3:Z)
`-(language::pluseq_op:Z)
+-(language::name:a:Z)
`-(language::integer:2:Z)
)";
CHECK_AST(data, result);
}
SECTION("minuseq_op")
{
std::string_view data = R"(
Z a = 1;
a -= 2;
)";
std::string_view result = R"(
(root:void)
+-(language::declaration:Z)
| +-(language::Z_set:void)
| +-(language::name:a:Z)
| `-(language::integer:1:Z)
`-(language::minuseq_op:Z)
+-(language::name:a:Z)
`-(language::integer:2:Z)
)";
CHECK_AST(data, result);
}
SECTION("for simple")
{
std::string_view data = R"(
for (;;);
)";
std::string_view result = R"(
(root:void)
`-(language::for_statement:void)
+-(language::for_init:void)
+-(language::for_test:B)
+-(language::for_post:void)
`-(language::for_statement_bloc:void)
)";
CHECK_AST(data, result);
}
SECTION("for std")
{
std::string_view data = R"(
for (Z i=0; i<3; i += 1) { i += 2; }
)";
std::string_view result = R"(
(root:void)
`-(language::for_statement:void)
+-(language::declaration:Z)
| +-(language::Z_set:void)
| +-(language::name:i:Z)
| `-(language::integer:0:Z)
+-(language::lesser_op:B)
| +-(language::name:i:Z)
| `-(language::integer:3:Z)
+-(language::pluseq_op:Z)
| +-(language::name:i:Z)
| `-(language::integer:1:Z)
`-(language::pluseq_op:Z)
+-(language::name:i:Z)
`-(language::integer:2:Z)
)";
CHECK_AST(data, result);
}
SECTION("empty bloc")
{
std::string_view data = R"(
{}
)";
std::string_view result = R"(
(root:void)
)";
CHECK_AST(data, result);
}
SECTION("bloc")
{
std::string_view data = R"(
{
3;
}
)";
std::string_view result = R"(
(root:void)
`-(language::bloc:void)
`-(language::integer:3:Z)
)";
CHECK_AST(data, result);
}
SECTION("if statements")
{
SECTION("empty if")
{
std::string_view data = R"(
if (true);
)";
std::string_view result = R"(
(root:void)
`-(language::if_statement:void)
+-(language::true_kw:B)
`-(language::statement_bloc:void)
)";
CHECK_AST(data, result);
}
SECTION("if else")
{
std::string_view data = R"(
if (true)
1;
else
2;
)";
std::string_view result = R"(
(root:void)
`-(language::if_statement:void)
+-(language::true_kw:B)
+-(language::integer:1:Z)
`-(language::integer:2:Z)
)";
CHECK_AST(data, result);
}
SECTION("if else simplify bloc")
{
std::string_view data = R"(
if (true) {
1;
} else {
2;
}
)";
std::string_view result = R"(
(root:void)
`-(language::if_statement:void)
+-(language::true_kw:B)
+-(language::integer:1:Z)
`-(language::integer:2:Z)
)";
CHECK_AST(data, result);
}
SECTION("if bloc")
{
std::string_view data = R"(
if (true) {
1;
2;
}
)";
std::string_view result = R"(
(root:void)
`-(language::if_statement:void)
+-(language::true_kw:B)
`-(language::bloc:void)
+-(language::integer:1:Z)
`-(language::integer:2:Z)
)";
CHECK_AST(data, result);
}
SECTION("if invalid condition")
{
std::string_view data = R"(
if ("string");
)";
string_input input{data, "test.pgs"};
auto ast = ASTBuilder::build(input);
ASTSymbolTableBuilder{*ast};
REQUIRE_THROWS_AS(ASTNodeDataTypeBuilder{*ast}, parse_error);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment