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

Add missing tests for ASTSymbolInitializationChecker

parent 9708c7ec
No related branches found
No related tags found
1 merge request!37Feature/language
......@@ -69,7 +69,7 @@ m = n;
REQUIRE(not symbol_z->attributes().isInitialized());
}
SECTION("Declarative initialization")
SECTION("Declarative function initialization")
{
std::string_view data = R"(
let f: R->R, x->x+1;
......@@ -89,6 +89,83 @@ let f: R->R, x->x+1;
REQUIRE(symbol_m->attributes().isInitialized());
}
SECTION("Lists")
{
SECTION("Declarative initialization")
{
std::string_view data = R"(
R*R (x,y) = (2.3, 4.1);
)";
string_input input{data, "test.pgs"};
auto ast = ASTBuilder::build(input);
ASTSymbolTableBuilder{*ast};
ASTSymbolInitializationChecker{*ast};
position position{internal::iterator{"fixture"}, "fixture"};
position.byte = data.size(); // ensure that variables are declared at this point
auto [symbol_x, found_x] = ast->m_symbol_table->find("x", position);
REQUIRE(found_x);
REQUIRE(symbol_x->attributes().isInitialized());
auto [symbol_y, found_y] = ast->m_symbol_table->find("y", position);
REQUIRE(found_y);
REQUIRE(symbol_y->attributes().isInitialized());
}
SECTION("Not initialized")
{
std::string_view data = R"(
R*R (x,y);
y = 3;
)";
string_input input{data, "test.pgs"};
auto ast = ASTBuilder::build(input);
ASTSymbolTableBuilder{*ast};
ASTSymbolInitializationChecker{*ast};
position position{internal::iterator{"fixture"}, "fixture"};
position.byte = data.size(); // ensure that variables are declared at this point
auto [symbol_x, found_x] = ast->m_symbol_table->find("x", position);
REQUIRE(found_x);
REQUIRE(not symbol_x->attributes().isInitialized());
auto [symbol_y, found_y] = ast->m_symbol_table->find("y", position);
REQUIRE(found_y);
REQUIRE(symbol_y->attributes().isInitialized());
}
SECTION("Affectation")
{
std::string_view data = R"(
R*R (x,y);
(x,y) = (2.3, 4.1);
)";
string_input input{data, "test.pgs"};
auto ast = ASTBuilder::build(input);
ASTSymbolTableBuilder{*ast};
ASTSymbolInitializationChecker{*ast};
position position{internal::iterator{"fixture"}, "fixture"};
position.byte = data.size(); // ensure that variables are declared at this point
auto [symbol_x, found_x] = ast->m_symbol_table->find("x", position);
REQUIRE(found_x);
REQUIRE(symbol_x->attributes().isInitialized());
auto [symbol_y, found_y] = ast->m_symbol_table->find("y", position);
REQUIRE(found_y);
REQUIRE(symbol_y->attributes().isInitialized());
}
}
SECTION("errors")
{
SECTION("used uninitialized")
......@@ -102,7 +179,23 @@ N m = n;
auto ast = ASTBuilder::build(input);
ASTSymbolTableBuilder{*ast};
REQUIRE_THROWS_AS(ASTSymbolInitializationChecker{*ast}, parse_error);
REQUIRE_THROWS_WITH(ASTSymbolInitializationChecker{*ast}, std::string{"uninitialized symbol 'n'"});
}
SECTION("used uninitialized in list affectation")
{
std::string_view data = R"(
N k;
N*R (l, x);
(k, x) = (l, 3.2);
)";
string_input input{data, "test.pgs"};
auto ast = ASTBuilder::build(input);
ASTSymbolTableBuilder{*ast};
REQUIRE_THROWS_WITH(ASTSymbolInitializationChecker{*ast}, std::string{"uninitialized symbol 'l'"});
}
SECTION("used uninitialized in function")
......@@ -116,7 +209,7 @@ let f : R->R, x->x+y;
auto ast = ASTBuilder::build(input);
ASTSymbolTableBuilder{*ast};
REQUIRE_THROWS_AS(ASTSymbolInitializationChecker{*ast}, parse_error);
REQUIRE_THROWS_WITH(ASTSymbolInitializationChecker{*ast}, std::string{"uninitialized symbol 'y'"});
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment