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
No related branches found
No related tags found
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