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);
+    }
+  }
 }