diff --git a/tests/test_ASTNodeDataTypeBuilder.cpp b/tests/test_ASTNodeDataTypeBuilder.cpp
index 3b8558c3d46700b80a622c111f6c51056a4e12a9..e73e0e7b01434f91953716776ad498d0d7b07472 100644
--- a/tests/test_ASTNodeDataTypeBuilder.cpp
+++ b/tests/test_ASTNodeDataTypeBuilder.cpp
@@ -256,4 +256,276 @@ break;
 
     CHECK_AST(data, result);
   }
+
+  SECTION("eq_op")
+  {
+    std::string_view data = R"(
+N a;
+a = 1;
+)";
+
+    std::string_view result = R"(
+(root:void)
+ +-(language::declaration:N)
+ |   +-(language::N_set:void)
+ |   `-(language::name:a:N)
+ `-(language::eq_op:N)
+     +-(language::name:a:N)
+     `-(language::integer:1:Z)
+)";
+
+    CHECK_AST(data, result);
+  }
+
+  SECTION("multiplyeq_op")
+  {
+    std::string_view data = R"(
+N a = 1;
+a *= 1.2;
+)";
+
+    std::string_view result = R"(
+(root:void)
+ +-(language::declaration:N)
+ |   +-(language::N_set:void)
+ |   +-(language::name:a:N)
+ |   `-(language::integer:1:Z)
+ `-(language::multiplyeq_op:N)
+     +-(language::name:a:N)
+     `-(language::real:1.2:R)
+)";
+
+    CHECK_AST(data, result);
+  }
+
+  SECTION("divideeq_op")
+  {
+    std::string_view data = R"(
+R a = 3;
+a /= 2;
+)";
+
+    std::string_view result = R"(
+(root:void)
+ +-(language::declaration:R)
+ |   +-(language::R_set:void)
+ |   +-(language::name:a:R)
+ |   `-(language::integer:3:Z)
+ `-(language::divideeq_op:R)
+     +-(language::name:a:R)
+     `-(language::integer:2:Z)
+)";
+
+    CHECK_AST(data, result);
+  }
+
+  SECTION("pluseq_op")
+  {
+    std::string_view data = R"(
+Z a = 3;
+a += 2;
+)";
+
+    std::string_view result = R"(
+(root:void)
+ +-(language::declaration:Z)
+ |   +-(language::Z_set:void)
+ |   +-(language::name:a:Z)
+ |   `-(language::integer:3:Z)
+ `-(language::pluseq_op:Z)
+     +-(language::name:a:Z)
+     `-(language::integer:2:Z)
+)";
+
+    CHECK_AST(data, result);
+  }
+
+  SECTION("minuseq_op")
+  {
+    std::string_view data = R"(
+Z a = 1;
+a -= 2;
+)";
+
+    std::string_view result = R"(
+(root:void)
+ +-(language::declaration:Z)
+ |   +-(language::Z_set:void)
+ |   +-(language::name:a:Z)
+ |   `-(language::integer:1:Z)
+ `-(language::minuseq_op:Z)
+     +-(language::name:a:Z)
+     `-(language::integer:2:Z)
+)";
+
+    CHECK_AST(data, result);
+  }
+
+  SECTION("for simple")
+  {
+    std::string_view data = R"(
+for (;;);
+)";
+
+    std::string_view result = R"(
+(root:void)
+ `-(language::for_statement:void)
+     +-(language::for_init:void)
+     +-(language::for_test:B)
+     +-(language::for_post:void)
+     `-(language::for_statement_bloc:void)
+)";
+
+    CHECK_AST(data, result);
+  }
+
+  SECTION("for std")
+  {
+    std::string_view data = R"(
+for (Z i=0; i<3; i += 1) { i += 2; }
+)";
+
+    std::string_view result = R"(
+(root:void)
+ `-(language::for_statement:void)
+     +-(language::declaration:Z)
+     |   +-(language::Z_set:void)
+     |   +-(language::name:i:Z)
+     |   `-(language::integer:0:Z)
+     +-(language::lesser_op:B)
+     |   +-(language::name:i:Z)
+     |   `-(language::integer:3:Z)
+     +-(language::pluseq_op:Z)
+     |   +-(language::name:i:Z)
+     |   `-(language::integer:1:Z)
+     `-(language::pluseq_op:Z)
+         +-(language::name:i:Z)
+         `-(language::integer:2:Z)
+)";
+
+    CHECK_AST(data, result);
+  }
+
+  SECTION("empty bloc")
+  {
+    std::string_view data = R"(
+{}
+)";
+
+    std::string_view result = R"(
+(root:void)
+)";
+
+    CHECK_AST(data, result);
+  }
+
+  SECTION("bloc")
+  {
+    std::string_view data = R"(
+{
+  3;
+}
+)";
+
+    std::string_view result = R"(
+(root:void)
+ `-(language::bloc:void)
+     `-(language::integer:3:Z)
+)";
+
+    CHECK_AST(data, result);
+  }
+
+  SECTION("if statements")
+  {
+    SECTION("empty if")
+    {
+      std::string_view data = R"(
+if (true);
+)";
+
+      std::string_view result = R"(
+(root:void)
+ `-(language::if_statement:void)
+     +-(language::true_kw:B)
+     `-(language::statement_bloc:void)
+)";
+
+      CHECK_AST(data, result);
+    }
+
+    SECTION("if else")
+    {
+      std::string_view data = R"(
+if (true)
+  1;
+else
+  2;
+)";
+
+      std::string_view result = R"(
+(root:void)
+ `-(language::if_statement:void)
+     +-(language::true_kw:B)
+     +-(language::integer:1:Z)
+     `-(language::integer:2:Z)
+)";
+
+      CHECK_AST(data, result);
+    }
+
+    SECTION("if else simplify bloc")
+    {
+      std::string_view data = R"(
+if (true) {
+  1;
+} else {
+  2;
+}
+)";
+
+      std::string_view result = R"(
+(root:void)
+ `-(language::if_statement:void)
+     +-(language::true_kw:B)
+     +-(language::integer:1:Z)
+     `-(language::integer:2:Z)
+)";
+
+      CHECK_AST(data, result);
+    }
+
+    SECTION("if bloc")
+    {
+      std::string_view data = R"(
+if (true) {
+  1;
+  2;
+}
+)";
+
+      std::string_view result = R"(
+(root:void)
+ `-(language::if_statement:void)
+     +-(language::true_kw:B)
+     `-(language::bloc:void)
+         +-(language::integer:1:Z)
+         `-(language::integer:2:Z)
+)";
+
+      CHECK_AST(data, result);
+    }
+
+    SECTION("if invalid condition")
+    {
+      std::string_view data = R"(
+if ("string");
+)";
+
+      string_input input{data, "test.pgs"};
+      auto ast = ASTBuilder::build(input);
+      ASTSymbolTableBuilder{*ast};
+      REQUIRE_THROWS_AS(ASTNodeDataTypeBuilder{*ast}, parse_error);
+    }
+  }
 }