From ef7dbba53595cd3694d61a58acbb104cd2bf6022 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Fri, 27 Nov 2020 11:13:16 +0100
Subject: [PATCH] Add missing tests for ASTNodeArraySubscriptExpressionBuilder
 (R^dxd)

---
 ...ASTNodeArraySubscriptExpressionBuilder.cpp | 60 +++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/tests/test_ASTNodeArraySubscriptExpressionBuilder.cpp b/tests/test_ASTNodeArraySubscriptExpressionBuilder.cpp
index 45b1303c3..7eadd2067 100644
--- a/tests/test_ASTNodeArraySubscriptExpressionBuilder.cpp
+++ b/tests/test_ASTNodeArraySubscriptExpressionBuilder.cpp
@@ -52,6 +52,45 @@ TEST_CASE("ASTNodeArraySubscriptExpressionBuilder", "[language]")
       auto& node_processor = *node->m_node_processor;
       REQUIRE(typeid(node_processor).name() == typeid(ArraySubscriptProcessor<TinyVector<3>>).name());
     }
+
+    SECTION("R^1x1")
+    {
+      {
+        std::unique_ptr array_node = std::make_unique<ASTNode>();
+        array_node->m_data_type    = ASTNodeDataType::build<ASTNodeDataType::matrix_t>(1, 1);
+        node->emplace_back(std::move(array_node));
+      }
+      REQUIRE_NOTHROW(ASTNodeArraySubscriptExpressionBuilder{*node});
+      REQUIRE(bool{node->m_node_processor});
+      auto& node_processor = *node->m_node_processor;
+      REQUIRE(typeid(node_processor).name() == typeid(ArraySubscriptProcessor<TinyMatrix<1>>).name());
+    }
+
+    SECTION("R^2x2")
+    {
+      {
+        std::unique_ptr array_node = std::make_unique<ASTNode>();
+        array_node->m_data_type    = ASTNodeDataType::build<ASTNodeDataType::matrix_t>(2, 2);
+        node->emplace_back(std::move(array_node));
+      }
+      REQUIRE_NOTHROW(ASTNodeArraySubscriptExpressionBuilder{*node});
+      REQUIRE(bool{node->m_node_processor});
+      auto& node_processor = *node->m_node_processor;
+      REQUIRE(typeid(node_processor).name() == typeid(ArraySubscriptProcessor<TinyMatrix<2>>).name());
+    }
+
+    SECTION("R^3x3")
+    {
+      {
+        std::unique_ptr array_node = std::make_unique<ASTNode>();
+        array_node->m_data_type    = ASTNodeDataType::build<ASTNodeDataType::matrix_t>(3, 3);
+        node->emplace_back(std::move(array_node));
+      }
+      REQUIRE_NOTHROW(ASTNodeArraySubscriptExpressionBuilder{*node});
+      REQUIRE(bool{node->m_node_processor});
+      auto& node_processor = *node->m_node_processor;
+      REQUIRE(typeid(node_processor).name() == typeid(ArraySubscriptProcessor<TinyMatrix<3>>).name());
+    }
   }
 
   SECTION("R^d component bad access")
@@ -67,6 +106,7 @@ TEST_CASE("ASTNodeArraySubscriptExpressionBuilder", "[language]")
       }
       REQUIRE_THROWS_WITH(ASTNodeArraySubscriptExpressionBuilder{*node}, "unexpected error: invalid array dimension");
     }
+
     SECTION("R^d (d > 3)")
     {
       {
@@ -76,6 +116,26 @@ TEST_CASE("ASTNodeArraySubscriptExpressionBuilder", "[language]")
       }
       REQUIRE_THROWS_WITH(ASTNodeArraySubscriptExpressionBuilder{*node}, "unexpected error: invalid array dimension");
     }
+
+    SECTION("R^dxd (d < 1)")
+    {
+      {
+        std::unique_ptr array_node = std::make_unique<ASTNode>();
+        array_node->m_data_type    = ASTNodeDataType::build<ASTNodeDataType::matrix_t>(0, 0);
+        node->emplace_back(std::move(array_node));
+      }
+      REQUIRE_THROWS_WITH(ASTNodeArraySubscriptExpressionBuilder{*node}, "unexpected error: invalid array dimension");
+    }
+
+    SECTION("R^dxd (d > 3)")
+    {
+      {
+        std::unique_ptr array_node = std::make_unique<ASTNode>();
+        array_node->m_data_type    = ASTNodeDataType::build<ASTNodeDataType::matrix_t>(4, 4);
+        node->emplace_back(std::move(array_node));
+      }
+      REQUIRE_THROWS_WITH(ASTNodeArraySubscriptExpressionBuilder{*node}, "unexpected error: invalid array dimension");
+    }
   }
 
   SECTION("invalid array expression")
-- 
GitLab