diff --git a/tests/test_ASTNodeDataTypeBuilder.cpp b/tests/test_ASTNodeDataTypeBuilder.cpp index 0b3c290ffac9d9f6a8e08c0afc28d98357e24b13..11cfd48191e3e29271ab76058ae1f8c573d6365b 100644 --- a/tests/test_ASTNodeDataTypeBuilder.cpp +++ b/tests/test_ASTNodeDataTypeBuilder.cpp @@ -940,4 +940,83 @@ not 1; CHECK_AST(data, result); } } + + SECTION("binary operators") + { + SECTION("plus") + { + std::string_view data = R"( +1+2; +)"; + + std::string_view result = R"( +(root:void) + `-(language::plus_op:Z) + +-(language::integer:1:Z) + `-(language::integer:2:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("minus") + { + std::string_view data = R"( +1-2; +)"; + + std::string_view result = R"( +(root:void) + `-(language::minus_op:Z) + +-(language::integer:1:Z) + `-(language::integer:2:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("multiply") + { + std::string_view data = R"( +1*2; +)"; + + std::string_view result = R"( +(root:void) + `-(language::multiply_op:Z) + +-(language::integer:1:Z) + `-(language::integer:2:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("divide") + { + std::string_view data = R"( +1/2; +)"; + + std::string_view result = R"( +(root:void) + `-(language::divide_op:Z) + +-(language::integer:1:Z) + `-(language::integer:2:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("invalid operands") + { + std::string_view data = R"( +1+"string"; +)"; + + string_input input{data, "test.pgs"}; + auto ast = ASTBuilder::build(input); + ASTSymbolTableBuilder{*ast}; + REQUIRE_THROWS_AS(ASTNodeDataTypeBuilder{*ast}, parse_error); + } + } }