From 220d67bf1e7e1aaa9568cfb503d8d04030feeb65 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Mon, 20 Jun 2022 22:20:22 +0200
Subject: [PATCH] Add few missing tests and remove dead code

---
 .../ASTNodeAffectationExpressionBuilder.cpp   |  6 ---
 ...STNodeBuiltinFunctionExpressionBuilder.cpp | 21 ----------
 src/language/ast/ASTNodeExpressionBuilder.cpp |  4 ++
 .../ast/ASTNodeFunctionExpressionBuilder.cpp  | 42 -------------------
 ...STNodeListAffectationExpressionBuilder.cpp |  6 ---
 tests/test_ASTNodeDataType.cpp                | 10 +++++
 6 files changed, 14 insertions(+), 75 deletions(-)

diff --git a/src/language/ast/ASTNodeAffectationExpressionBuilder.cpp b/src/language/ast/ASTNodeAffectationExpressionBuilder.cpp
index cc26d368e..321170395 100644
--- a/src/language/ast/ASTNodeAffectationExpressionBuilder.cpp
+++ b/src/language/ast/ASTNodeAffectationExpressionBuilder.cpp
@@ -37,12 +37,6 @@ ASTNodeAffectationExpressionBuilder::ASTNodeAffectationExpressionBuilder(ASTNode
     ASTNode& lhs_node = *node.children[0];
     ASTNode& rhs_node = *node.children[1];
 
-    if (rhs_node.m_data_type == ASTNodeDataType::list_t) {
-      if ((lhs_node.m_data_type == ASTNodeDataType::vector_t) or (lhs_node.m_data_type == ASTNodeDataType::matrix_t)) {
-        ASTNodeNaturalConversionChecker(rhs_node, lhs_node.m_data_type);
-      }
-    }
-
     node.m_node_processor = optional_processor_builder.value()->getNodeProcessor(lhs_node, rhs_node);
   } else {
     std::ostringstream error_message;
diff --git a/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp b/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp
index cdd9c43d9..e2b4a947f 100644
--- a/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp
+++ b/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp
@@ -85,16 +85,6 @@ ASTNodeBuiltinFunctionExpressionBuilder::_getArgumentConverter(const ASTNodeData
           // LCOV_EXCL_STOP
         }
       }
-      case ASTNodeDataType::list_t: {
-        if (argument_node_sub_data_type.m_parent_node.children.size() == parameter_v.dimension()) {
-          return std::make_unique<FunctionTinyVectorArgumentConverter<ParameterT, ParameterT>>(argument_number);
-        } else {
-          // LCOV_EXCL_START
-          throw ParseError("unexpected error: invalid argument dimension",
-                           std::vector{argument_node_sub_data_type.m_parent_node.begin()});
-          // LCOV_EXCL_STOP
-        }
-      }
       case ASTNodeDataType::int_t: {
         if (argument_node_sub_data_type.m_parent_node.is_type<language::integer>()) {
           if (std::stoi(argument_node_sub_data_type.m_parent_node.string()) == 0) {
@@ -162,17 +152,6 @@ ASTNodeBuiltinFunctionExpressionBuilder::_getArgumentConverter(const ASTNodeData
           // LCOV_EXCL_STOP
         }
       }
-      case ASTNodeDataType::list_t: {
-        if (argument_node_sub_data_type.m_parent_node.children.size() ==
-            (parameter_v.numberOfRows() * parameter_v.numberOfColumns())) {
-          return std::make_unique<FunctionTinyMatrixArgumentConverter<ParameterT, ParameterT>>(argument_number);
-        } else {
-          // LCOV_EXCL_START
-          throw ParseError("unexpected error: invalid argument dimension",
-                           std::vector{argument_node_sub_data_type.m_parent_node.begin()});
-          // LCOV_EXCL_STOP
-        }
-      }
       case ASTNodeDataType::int_t: {
         if (argument_node_sub_data_type.m_parent_node.is_type<language::integer>()) {
           if (std::stoi(argument_node_sub_data_type.m_parent_node.string()) == 0) {
diff --git a/src/language/ast/ASTNodeExpressionBuilder.cpp b/src/language/ast/ASTNodeExpressionBuilder.cpp
index 72b385495..4e61d118e 100644
--- a/src/language/ast/ASTNodeExpressionBuilder.cpp
+++ b/src/language/ast/ASTNodeExpressionBuilder.cpp
@@ -91,9 +91,11 @@ ASTNodeExpressionBuilder::_buildExpression(ASTNode& n)
       n.m_node_processor = std::make_unique<TinyVectorExpressionProcessor<3>>(n);
       break;
     }
+      // LCOV_EXCL_START
     default: {
       throw UnexpectedError("invalid vector dimension");
     }
+      // LCOV_EXCL_STOP
     }
   } else if (n.is_type<language::matrix_expression>()) {
     Assert(n.m_data_type == ASTNodeDataType::matrix_t);
@@ -112,9 +114,11 @@ ASTNodeExpressionBuilder::_buildExpression(ASTNode& n)
       n.m_node_processor = std::make_unique<TinyMatrixExpressionProcessor<3, 3>>(n);
       break;
     }
+      // LCOV_EXCL_START
     default: {
       throw UnexpectedError("invalid matrix dimension");
     }
+      // LCOV_EXCL_STOP
     }
 
   } else if ((n.is_type<language::row_expression>())) {
diff --git a/src/language/ast/ASTNodeFunctionExpressionBuilder.cpp b/src/language/ast/ASTNodeFunctionExpressionBuilder.cpp
index a836d24cd..a38112388 100644
--- a/src/language/ast/ASTNodeFunctionExpressionBuilder.cpp
+++ b/src/language/ast/ASTNodeFunctionExpressionBuilder.cpp
@@ -78,16 +78,6 @@ ASTNodeFunctionExpressionBuilder::_getArgumentConverter(SymbolType& parameter_sy
         // LCOV_EXCL_STOP
       }
     }
-    case ASTNodeDataType::list_t: {
-      if (node_sub_data_type.m_parent_node.children.size() == parameter_v.dimension()) {
-        return std::make_unique<FunctionTinyVectorArgumentConverter<ParameterT, ParameterT>>(parameter_id);
-      } else {
-        // LCOV_EXCL_START
-        throw ParseError("unexpected error: invalid argument dimension",
-                         std::vector{node_sub_data_type.m_parent_node.begin()});
-        // LCOV_EXCL_STOP
-      }
-    }
     case ASTNodeDataType::int_t: {
       if (node_sub_data_type.m_parent_node.is_type<language::integer>()) {
         if (std::stoi(node_sub_data_type.m_parent_node.string()) == 0) {
@@ -120,16 +110,6 @@ ASTNodeFunctionExpressionBuilder::_getArgumentConverter(SymbolType& parameter_sy
         // LCOV_EXCL_STOP
       }
     }
-    case ASTNodeDataType::list_t: {
-      if (node_sub_data_type.m_parent_node.children.size() == parameter_v.dimension()) {
-        return std::make_unique<FunctionTinyMatrixArgumentConverter<ParameterT, ParameterT>>(parameter_id);
-      } else {
-        // LCOV_EXCL_START
-        throw ParseError("unexpected error: invalid argument dimension",
-                         std::vector{node_sub_data_type.m_parent_node.begin()});
-        // LCOV_EXCL_STOP
-      }
-    }
     case ASTNodeDataType::int_t: {
       if (node_sub_data_type.m_parent_node.is_type<language::integer>()) {
         if (std::stoi(node_sub_data_type.m_parent_node.string()) == 0) {
@@ -325,17 +305,6 @@ ASTNodeFunctionExpressionBuilder::_getFunctionProcessor(const ASTNodeDataType& r
         // LCOV_EXCL_STOP
       }
     }
-    case ASTNodeDataType::list_t: {
-      if (function_component_expression.children.size() == return_v.dimension()) {
-        return std::make_unique<FunctionExpressionProcessor<ReturnT, AggregateDataVariant>>(
-          function_component_expression);
-      } else {
-        // LCOV_EXCL_START
-        throw ParseError("unexpected error: invalid dimension for returned vector",
-                         std::vector{function_component_expression.begin()});
-        // LCOV_EXCL_STOP
-      }
-    }
     case ASTNodeDataType::int_t: {
       if (function_component_expression.is_type<language::integer>()) {
         if (std::stoi(function_component_expression.string()) == 0) {
@@ -370,17 +339,6 @@ ASTNodeFunctionExpressionBuilder::_getFunctionProcessor(const ASTNodeDataType& r
         // LCOV_EXCL_STOP
       }
     }
-    case ASTNodeDataType::list_t: {
-      if (function_component_expression.children.size() == return_v.dimension()) {
-        return std::make_unique<FunctionExpressionProcessor<ReturnT, AggregateDataVariant>>(
-          function_component_expression);
-      } else {
-        // LCOV_EXCL_START
-        throw ParseError("unexpected error: invalid dimension for returned vector",
-                         std::vector{function_component_expression.begin()});
-        // LCOV_EXCL_STOP
-      }
-    }
     case ASTNodeDataType::int_t: {
       if (function_component_expression.is_type<language::integer>()) {
         if (std::stoi(function_component_expression.string()) == 0) {
diff --git a/src/language/ast/ASTNodeListAffectationExpressionBuilder.cpp b/src/language/ast/ASTNodeListAffectationExpressionBuilder.cpp
index 76b34ae53..6697967d2 100644
--- a/src/language/ast/ASTNodeListAffectationExpressionBuilder.cpp
+++ b/src/language/ast/ASTNodeListAffectationExpressionBuilder.cpp
@@ -58,9 +58,6 @@ ASTNodeListAffectationExpressionBuilder::_buildAffectationProcessor(
       if ((node_sub_data_type.m_data_type == ASTNodeDataType::vector_t) and
           (node_sub_data_type.m_data_type.dimension() == value.dimension())) {
         list_affectation_processor->template add<ValueT, ValueT>(value_node);
-      } else if ((node_sub_data_type.m_data_type == ASTNodeDataType::list_t) and
-                 (node_sub_data_type.m_parent_node.children.size() == value.dimension())) {
-        list_affectation_processor->template add<ValueT, AggregateDataVariant>(value_node);
       } else if (node_sub_data_type.m_parent_node.is_type<language::integer>()) {
         if (std::stoi(node_sub_data_type.m_parent_node.string()) == 0) {
           list_affectation_processor->template add<ValueT, ZeroType>(value_node);
@@ -96,9 +93,6 @@ ASTNodeListAffectationExpressionBuilder::_buildAffectationProcessor(
           (node_sub_data_type.m_data_type.numberOfRows() == value.numberOfRows()) and
           (node_sub_data_type.m_data_type.numberOfColumns() == value.numberOfColumns())) {
         list_affectation_processor->template add<ValueT, ValueT>(value_node);
-      } else if ((node_sub_data_type.m_data_type == ASTNodeDataType::list_t) and
-                 (node_sub_data_type.m_parent_node.children.size() == value.numberOfRows() * value.numberOfColumns())) {
-        list_affectation_processor->template add<ValueT, AggregateDataVariant>(value_node);
       } else if (node_sub_data_type.m_parent_node.is_type<language::integer>()) {
         if (std::stoi(node_sub_data_type.m_parent_node.string()) == 0) {
           list_affectation_processor->template add<ValueT, ZeroType>(value_node);
diff --git a/tests/test_ASTNodeDataType.cpp b/tests/test_ASTNodeDataType.cpp
index 8c6219e2d..29ee31308 100644
--- a/tests/test_ASTNodeDataType.cpp
+++ b/tests/test_ASTNodeDataType.cpp
@@ -444,6 +444,16 @@ TEST_CASE("ASTNodeDataType", "[language]")
       REQUIRE_THROWS_WITH(getMatrixExpressionType(*matrix_expression_node), "unexpected node type");
     }
 
+    SECTION("bad content type")
+    {
+      const size_t dimension = 3;
+      matrix_expression_node->children.clear();
+      for (size_t i = 0; i < dimension; ++i) {
+        matrix_expression_node->children.emplace_back(std::make_unique<ASTNode>());
+      }
+      REQUIRE_THROWS_WITH(getMatrixExpressionType(*matrix_expression_node), "expecting row expression");
+    }
+
     SECTION("bad children size 1")
     {
       matrix_expression_node->children.resize(4);
-- 
GitLab