diff --git a/tests/test_ASTNodeDataTypeBuilder.cpp b/tests/test_ASTNodeDataTypeBuilder.cpp index db5584779a619738a64acb22c6953f6b63f8ec30..5d557d21a65990562a140ee5998151ea88d71cb3 100644 --- a/tests/test_ASTNodeDataTypeBuilder.cpp +++ b/tests/test_ASTNodeDataTypeBuilder.cpp @@ -700,4 +700,214 @@ do 1; while ("string"); REQUIRE_THROWS_AS(ASTNodeDataTypeBuilder{*ast}, parse_error); } } + + SECTION("boolean statements") + { + SECTION("unary not") + { + std::string_view data = R"( +not 1; +)"; + + std::string_view result = R"( +(root:void) + `-(language::unary_not:B) + `-(language::integer:1:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("lesser op") + { + std::string_view data = R"( +1<2; +)"; + + std::string_view result = R"( +(root:void) + `-(language::lesser_op:B) + +-(language::integer:1:Z) + `-(language::integer:2:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("lesser_or_eq op") + { + std::string_view data = R"( +1<=2; +)"; + + std::string_view result = R"( +(root:void) + `-(language::lesser_or_eq_op:B) + +-(language::integer:1:Z) + `-(language::integer:2:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("greater op") + { + std::string_view data = R"( +1>2; +)"; + + std::string_view result = R"( +(root:void) + `-(language::greater_op:B) + +-(language::integer:1:Z) + `-(language::integer:2:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("greater_or_eq op") + { + std::string_view data = R"( +1>=2; +)"; + + std::string_view result = R"( +(root:void) + `-(language::greater_or_eq_op:B) + +-(language::integer:1:Z) + `-(language::integer:2:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("eqeq op") + { + std::string_view data = R"( +1==2; +)"; + + std::string_view result = R"( +(root:void) + `-(language::eqeq_op:B) + +-(language::integer:1:Z) + `-(language::integer:2:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("not_eq op") + { + std::string_view data = R"( +1!=2; +)"; + + std::string_view result = R"( +(root:void) + `-(language::not_eq_op:B) + +-(language::integer:1:Z) + `-(language::integer:2:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("and op") + { + std::string_view data = R"( +1 and 2; +)"; + + std::string_view result = R"( +(root:void) + `-(language::and_op:B) + +-(language::integer:1:Z) + `-(language::integer:2:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("or op") + { + std::string_view data = R"( +1 or 2; +)"; + + std::string_view result = R"( +(root:void) + `-(language::or_op:B) + +-(language::integer:1:Z) + `-(language::integer:2:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("xor op") + { + std::string_view data = R"( +1 xor 2; +)"; + + std::string_view result = R"( +(root:void) + `-(language::xor_op:B) + +-(language::integer:1:Z) + `-(language::integer:2:Z) +)"; + + CHECK_AST(data, result); + } + } + + SECTION("unary operators") + { + SECTION("unary minus") + { + std::string_view data = R"( +- 1; +)"; + + std::string_view result = R"( +(root:void) + `-(language::unary_minus:Z) + `-(language::integer:1:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("unary plusplus") + { + std::string_view data = R"( +++1; +)"; + + std::string_view result = R"( +(root:void) + `-(language::unary_plusplus:Z) + `-(language::integer:1:Z) +)"; + + CHECK_AST(data, result); + } + + SECTION("unary minusminus") + { + std::string_view data = R"( +--1; +)"; + + std::string_view result = R"( +(root:void) + `-(language::unary_minusminus:Z) + `-(language::integer:1:Z) +)"; + + CHECK_AST(data, result); + } + } }