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

Add missing unit tests for ASTBuilder

parent 25eacf33
Branches
Tags
1 merge request!37Feature/language
...@@ -310,6 +310,284 @@ not not not false; ...@@ -310,6 +310,284 @@ not not not false;
| `-(language::integer:1) | `-(language::integer:1)
`-(language::post_minusminus) `-(language::post_minusminus)
`-(language::integer:2) `-(language::integer:2)
)";
check_ast(data, result);
}
SECTION("statement bloc simplification (one instruction per bloc)")
{
std::string_view data = R"(
if (a > 0) {
a = 0;
} else {
a =-1;
}
)";
std::string_view result = R"(
(root)
`-(language::if_statement)
+-(language::greater_op)
| +-(language::name:a)
| `-(language::integer:0)
+-(language::eq_op)
| +-(language::name:a)
| `-(language::integer:0)
`-(language::eq_op)
+-(language::name:a)
`-(language::unary_minus)
`-(language::integer:1)
)";
check_ast(data, result);
}
SECTION("statement bloc simplification (one instruction in first bloc)")
{
std::string_view data = R"(
if (a > 0) {
a = 0;
} else {
a = 3;
a = a++;
}
)";
std::string_view result = R"(
(root)
`-(language::if_statement)
+-(language::greater_op)
| +-(language::name:a)
| `-(language::integer:0)
+-(language::eq_op)
| +-(language::name:a)
| `-(language::integer:0)
`-(language::bloc)
+-(language::eq_op)
| +-(language::name:a)
| `-(language::integer:3)
`-(language::eq_op)
+-(language::name:a)
`-(language::post_plusplus)
`-(language::name:a)
)";
check_ast(data, result);
}
SECTION("statement bloc simplification (one instruction in second bloc)")
{
std::string_view data = R"(
if (a > 0) {
a = 0;
a++;
} else {
a = 3;
}
)";
std::string_view result = R"(
(root)
`-(language::if_statement)
+-(language::greater_op)
| +-(language::name:a)
| `-(language::integer:0)
+-(language::bloc)
| +-(language::eq_op)
| | +-(language::name:a)
| | `-(language::integer:0)
| `-(language::post_plusplus)
| `-(language::name:a)
`-(language::eq_op)
+-(language::name:a)
`-(language::integer:3)
)";
check_ast(data, result);
}
SECTION("statement bloc non-simplification (one declaration in each bloc)")
{
std::string_view data = R"(
if (a > 0) {
R b = a;
} else {
R c = 2*a;
}
)";
std::string_view result = R"(
(root)
`-(language::if_statement)
+-(language::greater_op)
| +-(language::name:a)
| `-(language::integer:0)
+-(language::bloc)
| `-(language::declaration)
| +-(language::R_set)
| +-(language::name:b)
| `-(language::name:a)
`-(language::bloc)
`-(language::declaration)
+-(language::R_set)
+-(language::name:c)
`-(language::multiply_op)
+-(language::integer:2)
`-(language::name:a)
)";
check_ast(data, result);
}
SECTION("statement bloc simplification (one declaration in first bloc)")
{
std::string_view data = R"(
if (a > 0) {
R b = a;
} else {
R c = 2*a;
++a;
}
)";
std::string_view result = R"(
(root)
`-(language::if_statement)
+-(language::greater_op)
| +-(language::name:a)
| `-(language::integer:0)
+-(language::bloc)
| `-(language::declaration)
| +-(language::R_set)
| +-(language::name:b)
| `-(language::name:a)
`-(language::bloc)
+-(language::declaration)
| +-(language::R_set)
| +-(language::name:c)
| `-(language::multiply_op)
| +-(language::integer:2)
| `-(language::name:a)
`-(language::unary_plusplus)
`-(language::name:a)
)";
check_ast(data, result);
}
SECTION("statement bloc simplification (one declaration in second bloc)")
{
std::string_view data = R"(
if (a > 0) {
R b = a;
++b;
} else {
R c = 2*a;
}
)";
std::string_view result = R"(
(root)
`-(language::if_statement)
+-(language::greater_op)
| +-(language::name:a)
| `-(language::integer:0)
+-(language::bloc)
| +-(language::declaration)
| | +-(language::R_set)
| | +-(language::name:b)
| | `-(language::name:a)
| `-(language::unary_plusplus)
| `-(language::name:b)
`-(language::bloc)
`-(language::declaration)
+-(language::R_set)
+-(language::name:c)
`-(language::multiply_op)
+-(language::integer:2)
`-(language::name:a)
)";
check_ast(data, result);
}
SECTION("for-statements simplification")
{
std::string_view data = R"(
for(N i=0; i<10; ++i) {
i += 3;
}
)";
std::string_view result = R"(
(root)
`-(language::for_statement)
+-(language::declaration)
| +-(language::N_set)
| +-(language::name:i)
| `-(language::integer:0)
+-(language::lesser_op)
| +-(language::name:i)
| `-(language::integer:10)
+-(language::unary_plusplus)
| `-(language::name:i)
`-(language::pluseq_op)
+-(language::name:i)
`-(language::integer:3)
)";
check_ast(data, result);
}
SECTION("for-statements simplification (complex bloc)")
{
std::string_view data = R"(
for(N i=0; i<10; ++i) {
i += 3;
R j=i/5.;
}
)";
std::string_view result = R"(
(root)
`-(language::for_statement)
+-(language::declaration)
| +-(language::N_set)
| +-(language::name:i)
| `-(language::integer:0)
+-(language::lesser_op)
| +-(language::name:i)
| `-(language::integer:10)
+-(language::unary_plusplus)
| `-(language::name:i)
`-(language::for_statement_bloc)
+-(language::pluseq_op)
| +-(language::name:i)
| `-(language::integer:3)
`-(language::declaration)
+-(language::R_set)
+-(language::name:j)
`-(language::divide_op)
+-(language::name:i)
`-(language::real:5.)
)";
check_ast(data, result);
}
SECTION("ostream simplifications")
{
std::string_view data = R"(
cout << 1+2 << "\n";
cerr << "error?\n";
clog << "log " << l << "\n";
)";
std::string_view result = R"(
(root)
+-(language::cout_kw)
| +-(language::plus_op)
| | +-(language::integer:1)
| | `-(language::integer:2)
| `-(language::literal:"\n")
+-(language::cerr_kw)
| `-(language::literal:"error?\n")
`-(language::clog_kw)
+-(language::literal:"log ")
+-(language::name:l)
`-(language::literal:"\n")
)"; )";
check_ast(data, result); 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