diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index de029d999cb5a70fed90b34ec3d9be02f17f836a..4f6c06b029415962764324bf9ab434898912a49e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -8,6 +8,7 @@ add_executable (unit_tests test_ASTDotPrinter.cpp test_ASTBuilder.cpp test_ASTNodeDataType.cpp + test_ASTNodeDataTypeBuilder.cpp test_ASTSymbolTableBuilder.cpp test_ASTSymbolInitializationChecker.cpp test_ItemType.cpp diff --git a/tests/test_ASTNodeDataTypeBuilder.cpp b/tests/test_ASTNodeDataTypeBuilder.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a4bcd80b2ad2ce955d6e3307a01f45970dc28aac --- /dev/null +++ b/tests/test_ASTNodeDataTypeBuilder.cpp @@ -0,0 +1,83 @@ +#include <catch2/catch.hpp> + +#include <ASTBuilder.hpp> +#include <ASTNodeDataTypeBuilder.hpp> +#include <ASTSymbolTableBuilder.hpp> + +#include <ASTPrinter.hpp> + +#define CHECK_AST(data, expected_output) \ + { \ + static_assert(std::is_same_v<std::decay_t<decltype(data)>, std::string_view>); \ + static_assert(std::is_same_v<std::decay_t<decltype(expected_output)>, std::string_view>); \ + \ + string_input input{data, "test.pgs"}; \ + auto ast = ASTBuilder::build(input); \ + \ + ASTSymbolTableBuilder{*ast}; \ + ASTNodeDataTypeBuilder{*ast}; \ + \ + std::stringstream ast_output; \ + ast_output << '\n' << ASTPrinter{*ast, ASTPrinter::Format::raw, {ASTPrinter::Info::data_type}}; \ + \ + REQUIRE(ast_output.str() == expected_output); \ + } + +TEST_CASE("ASTNodeDataTypeBuilder", "[language]") +{ + SECTION("integer") + { + std::string_view data = R"( +1; +)"; + + std::string_view result = R"( +(root:void) + `-(language::integer:1:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("real") + { + std::string_view data = R"( +1.3; +)"; + + std::string_view result = R"( +(root:void) + `-(language::real:1.3:R) +)"; + + CHECK_AST(data, result); + } + + SECTION("true") + { + std::string_view data = R"( +true; +)"; + + std::string_view result = R"( +(root:void) + `-(language::true_kw:B) +)"; + + CHECK_AST(data, result); + } + + SECTION("false") + { + std::string_view data = R"( +false; +)"; + + std::string_view result = R"( +(root:void) + `-(language::false_kw:B) +)"; + + CHECK_AST(data, result); + } +}