Skip to content
Snippets Groups Projects
Commit 01e1d381 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add tests for ASTNodeArraySubscriptExpressionBuilder

parent 886128bc
Branches
Tags
1 merge request!37Feature/language
......@@ -23,6 +23,7 @@ ASTNodeArraySubscriptExpressionBuilder::ASTNodeArraySubscriptExpressionBuilder(A
break;
}
default: {
throw parse_error("unexpected error: invalid array dimension", array_expression.begin());
break;
}
}
......
......@@ -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
......
#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");
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment