diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index bd30945f2fab3f09362b27e25f74cc830496b9a9..fda652d92696c9bca0ff39db5766b2a5fd63b0d1 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -3,6 +3,7 @@ set(EXECUTABLE_OUTPUT_PATH ${PUGS_BINARY_DIR}) add_executable (unit_tests test_main.cpp + test_ASTSymbolTableBuilder.cpp test_ASTBuilder.cpp test_Array.cpp test_ArrayUtils.cpp diff --git a/tests/test_ASTSymbolTableBuilder.cpp b/tests/test_ASTSymbolTableBuilder.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1f3d98f21f74c8ff9fc538d6964fb4f96e03c271 --- /dev/null +++ b/tests/test_ASTSymbolTableBuilder.cpp @@ -0,0 +1,48 @@ +#include <catch2/catch.hpp> + +#include <ASTBuilder.hpp> +#include <ASTSymbolTableBuilder.hpp> + +TEST_CASE("ASTSymbolTableBuilder", "[language]") +{ + SECTION("Build symbols") + { + std::string_view data = R"( +N n = 2; +{ + N m = n; + R n = m/3.; +} +)"; + + string_input input{data, "test.pgs"}; + auto ast = ASTBuilder::build(input); + + ASTSymbolTableBuilder{*ast}; + } + + SECTION("Undeclared symbol") + { + std::string_view data = R"( +N n = a; +)"; + + string_input input{data, "test.pgs"}; + auto ast = ASTBuilder::build(input); + + REQUIRE_THROWS_AS(ASTSymbolTableBuilder{*ast}, parse_error); + } + + SECTION("Re-declared symbol") + { + std::string_view data = R"( +N n = 0; +N n = 1; +)"; + + string_input input{data, "test.pgs"}; + auto ast = ASTBuilder::build(input); + + REQUIRE_THROWS_AS(ASTSymbolTableBuilder{*ast}, parse_error); + } +}