Skip to content
Snippets Groups Projects
Select Git revision
  • 2291b700be21cba30dd12962e07e4e1e9ac32c42
  • develop default protected
  • origin/stage/bouguettaia
  • feature/kinetic-schemes
  • feature/reconstruction
  • feature/local-dt-fsi
  • feature/composite-scheme-sources
  • feature/composite-scheme-other-fluxes
  • feature/serraille
  • feature/variational-hydro
  • feature/composite-scheme
  • hyperplastic
  • feature/polynomials
  • feature/gks
  • feature/implicit-solver-o2
  • feature/coupling_module
  • feature/implicit-solver
  • feature/merge-local-dt-fsi
  • master protected
  • feature/escobar-smoother
  • feature/hypoelasticity-clean
  • v0.5.0 protected
  • v0.4.1 protected
  • v0.4.0 protected
  • v0.3.0 protected
  • v0.2.0 protected
  • v0.1.0 protected
  • Kidder
  • v0.0.4 protected
  • v0.0.3 protected
  • v0.0.2 protected
  • v0 protected
  • v0.0.1 protected
33 results

test_ASTNodeArraySubscriptExpressionBuilder.cpp

Blame
  • test_ASTNodeArraySubscriptExpressionBuilder.cpp 3.12 KiB
    #include <catch2/catch.hpp>
    
    #include <language/ast/ASTNode.hpp>
    #include <language/ast/ASTNodeArraySubscriptExpressionBuilder.hpp>
    #include <language/node_processor/ArraySubscriptProcessor.hpp>
    
    #include <pegtl/string_input.hpp>
    
    // clazy:excludeall=non-pod-global-static
    
    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});
          auto& node_processor = *node->m_node_processor;
          REQUIRE(typeid(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});
          auto& node_processor = *node->m_node_processor;
          REQUIRE(typeid(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});
          auto& node_processor = *node->m_node_processor;
          REQUIRE(typeid(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");
      }
    }