diff --git a/src/language/ASTNodeArraySubscriptExpressionBuilder.cpp b/src/language/ASTNodeArraySubscriptExpressionBuilder.cpp
index fd214c54de37c58724d57b743357f57a989d3d11..1cdfb8354faa9c476e94fde4fb8228e3689a21a5 100644
--- a/src/language/ASTNodeArraySubscriptExpressionBuilder.cpp
+++ b/src/language/ASTNodeArraySubscriptExpressionBuilder.cpp
@@ -23,6 +23,7 @@ ASTNodeArraySubscriptExpressionBuilder::ASTNodeArraySubscriptExpressionBuilder(A
       break;
     }
     default: {
+      throw parse_error("unexpected error: invalid array dimension", array_expression.begin());
       break;
     }
     }
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index df7a0acfb120df2fb049e8312fb82680b1865b65..e973c87166171d1cabb6b45ebb30b2324ac4787f 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -12,6 +12,7 @@ add_executable (unit_tests
   test_ASTModulesImporter.cpp
   test_ASTNode.cpp
   test_ASTNodeAffectationExpressionBuilder.cpp
+  test_ASTNodeArraySubscriptExpressionBuilder.cpp
   test_ASTNodeBinaryOperatorExpressionBuilder.cpp
   test_ASTNodeCFunctionExpressionBuilder.cpp
   test_ASTNodeDataType.cpp
diff --git a/tests/test_ASTNodeArraySubscriptExpressionBuilder.cpp b/tests/test_ASTNodeArraySubscriptExpressionBuilder.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a3a27ad6728f22a9633ebfdbc0cd144373cac0ac
--- /dev/null
+++ b/tests/test_ASTNodeArraySubscriptExpressionBuilder.cpp
@@ -0,0 +1,86 @@
+#include <catch2/catch.hpp>
+
+#include <ASTNodeArraySubscriptExpressionBuilder.hpp>
+
+#include <node_processor/ArraySubscriptProcessor.hpp>
+
+#include <ASTNode.hpp>
+#include <PEGGrammar.hpp>
+
+TEST_CASE("ASTNodeArraySubscriptExpressionBuilder", "[language]")
+{
+  SECTION("R^d component access")
+  {
+    std::unique_ptr node = std::make_unique<ASTNode>();
+
+    SECTION("R^1")
+    {
+      {
+        std::unique_ptr array_node = std::make_unique<ASTNode>();
+        array_node->m_data_type    = ASTNodeDataType{ASTNodeDataType::vector_t, 1};
+        node->emplace_back(std::move(array_node));
+      }
+      REQUIRE_NOTHROW(ASTNodeArraySubscriptExpressionBuilder{*node});
+      REQUIRE(bool{node->m_node_processor});
+      REQUIRE(typeid(*node->m_node_processor).name() == typeid(ArraySubscriptProcessor<TinyVector<1>>).name());
+    }
+
+    SECTION("R^2")
+    {
+      {
+        std::unique_ptr array_node = std::make_unique<ASTNode>();
+        array_node->m_data_type    = ASTNodeDataType{ASTNodeDataType::vector_t, 2};
+        node->emplace_back(std::move(array_node));
+      }
+      REQUIRE_NOTHROW(ASTNodeArraySubscriptExpressionBuilder{*node});
+      REQUIRE(bool{node->m_node_processor});
+      REQUIRE(typeid(*node->m_node_processor).name() == typeid(ArraySubscriptProcessor<TinyVector<2>>).name());
+    }
+
+    SECTION("R^3")
+    {
+      {
+        std::unique_ptr array_node = std::make_unique<ASTNode>();
+        array_node->m_data_type    = ASTNodeDataType{ASTNodeDataType::vector_t, 3};
+        node->emplace_back(std::move(array_node));
+      }
+      REQUIRE_NOTHROW(ASTNodeArraySubscriptExpressionBuilder{*node});
+      REQUIRE(bool{node->m_node_processor});
+      REQUIRE(typeid(*node->m_node_processor).name() == typeid(ArraySubscriptProcessor<TinyVector<3>>).name());
+    }
+  }
+
+  SECTION("R^d component bad access")
+  {
+    std::unique_ptr node = std::make_unique<ASTNode>();
+
+    SECTION("R^d (d < 1)")
+    {
+      {
+        std::unique_ptr array_node = std::make_unique<ASTNode>();
+        array_node->m_data_type    = ASTNodeDataType{ASTNodeDataType::vector_t, 0};
+        node->emplace_back(std::move(array_node));
+      }
+      REQUIRE_THROWS_WITH(ASTNodeArraySubscriptExpressionBuilder{*node}, "unexpected error: invalid array dimension");
+    }
+    SECTION("R^d (d > 3)")
+    {
+      {
+        std::unique_ptr array_node = std::make_unique<ASTNode>();
+        array_node->m_data_type    = ASTNodeDataType{ASTNodeDataType::vector_t, 4};
+        node->emplace_back(std::move(array_node));
+      }
+      REQUIRE_THROWS_WITH(ASTNodeArraySubscriptExpressionBuilder{*node}, "unexpected error: invalid array dimension");
+    }
+  }
+
+  SECTION("invalid array expression")
+  {
+    std::unique_ptr node = std::make_unique<ASTNode>();
+    {
+      std::unique_ptr array_node = std::make_unique<ASTNode>();
+      node->emplace_back(std::move(array_node));
+    }
+    REQUIRE_THROWS_WITH(ASTNodeArraySubscriptExpressionBuilder{*node}, "unexpected error: invalid array type");
+  }
+}