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

Add few tests w.r.t. data type builder of function declarations

parent c37ed55c
No related branches found
No related tags found
1 merge request!37Feature/language
...@@ -117,28 +117,126 @@ false; ...@@ -117,28 +117,126 @@ false;
SECTION("let declaration") SECTION("let declaration")
{ {
SECTION("scalar functions") SECTION("R-functions")
{
SECTION("multiple variable")
{
std::string_view data = R"(
let substract : R*R -> R, (x,y) -> x-y;
)";
std::string_view result = R"(
(root:void)
`-(language::let_declaration:void)
`-(language::name:substract:function)
)";
CHECK_AST(data, result);
}
SECTION("name -> expression")
{ {
std::string_view data = R"( std::string_view data = R"(
let f : R -> R, x -> x; let f : R -> R, x -> x;
let g : R*R -> R, (x,y) -> x+y;
)"; )";
std::string_view result = R"( std::string_view result = R"(
(root:void) (root:void)
+-(language::let_declaration:void)
| `-(language::name:f:function)
`-(language::let_declaration:void) `-(language::let_declaration:void)
`-(language::name:g:function) `-(language::name:f:function)
)";
CHECK_AST(data, result);
}
SECTION("name list -> expression")
{
std::string_view data = R"(
let f : R -> R, (x) -> (x+2)/2;
)";
std::string_view result = R"(
(root:void)
`-(language::let_declaration:void)
`-(language::name:f:function)
)";
CHECK_AST(data, result);
}
SECTION("name -> expression list")
{
std::string_view data = R"(
let f : R -> R, x -> (x*x);
)";
std::string_view result = R"(
(root:void)
`-(language::let_declaration:void)
`-(language::name:f:function)
)";
CHECK_AST(data, result);
}
SECTION("name list -> expression list")
{
std::string_view data = R"(
let f : R -> R, (x) -> (x+1);
)";
std::string_view result = R"(
(root:void)
`-(language::let_declaration:void)
`-(language::name:f:function)
)";
CHECK_AST(data, result);
}
}
SECTION("Z-functions")
{
SECTION("name -> expression")
{
std::string_view data = R"(
let f : Z -> Z, z -> z-1;
)";
std::string_view result = R"(
(root:void)
`-(language::let_declaration:void)
`-(language::name:f:function)
)";
CHECK_AST(data, result);
}
}
SECTION("N-functions")
{
SECTION("name -> expression")
{
std::string_view data = R"(
let f : N -> N, x -> (x+1)/2;
)";
std::string_view result = R"(
(root:void)
`-(language::let_declaration:void)
`-(language::name:f:function)
)"; )";
CHECK_AST(data, result); CHECK_AST(data, result);
} }
}
SECTION("scalar functions") SECTION("B-functions")
{
SECTION("name -> expression")
{ {
std::string_view data = R"( std::string_view data = R"(
let f : R -> R, (x) -> x; let f : N*B -> B, (n,b) -> (n>3) and b;
)"; )";
std::string_view result = R"( std::string_view result = R"(
...@@ -151,6 +249,34 @@ let f : R -> R, (x) -> x; ...@@ -151,6 +249,34 @@ let f : R -> R, (x) -> x;
} }
} }
SECTION("errors")
{
SECTION("wring parameter number")
{
std::string_view data = R"(
let f : R*Z -> B, x -> 3;
)";
string_input input{data, "test.pgs"};
auto ast = ASTBuilder::build(input);
ASTSymbolTableBuilder{*ast};
REQUIRE_THROWS_AS(ASTNodeDataTypeBuilder{*ast}, parse_error);
}
SECTION("wring parameter number 2")
{
std::string_view data = R"(
let f : R -> B, (x,y) -> 3;
)";
string_input input{data, "test.pgs"};
auto ast = ASTBuilder::build(input);
ASTSymbolTableBuilder{*ast};
REQUIRE_THROWS_AS(ASTNodeDataTypeBuilder{*ast}, parse_error);
}
}
}
SECTION("ostream") SECTION("ostream")
{ {
std::string_view data = R"( std::string_view data = R"(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment