diff --git a/tests/test_ASTNodeArraySubscriptExpressionBuilder.cpp b/tests/test_ASTNodeArraySubscriptExpressionBuilder.cpp index 45b1303c3db5c69457921d98f76f43403274d7ed..7eadd2067e54e670021aa2bee03e92fe0abedccd 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")