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

Add missing tests for ASTNodeDataType

parent 068dccf4
No related branches found
No related tags found
1 merge request!37Feature/language
......@@ -2,6 +2,9 @@
#include <ASTNodeDataType.hpp>
#include <ASTNode.hpp>
#include <PEGGrammar.hpp>
TEST_CASE("ASTNodeDataType", "[language]")
{
SECTION("dataTypeName")
......@@ -16,6 +19,10 @@ TEST_CASE("ASTNodeDataType", "[language]")
REQUIRE(dataTypeName(ASTNodeDataType::void_t) == "void");
REQUIRE(dataTypeName(ASTNodeDataType::function_t) == "function");
REQUIRE(dataTypeName(ASTNodeDataType::c_function_t) == "c_function");
REQUIRE(dataTypeName(ASTNodeDataType::list_t) == "list");
REQUIRE(dataTypeName(ASTNodeDataType{ASTNodeDataType::vector_t, 1}) == "R^1");
REQUIRE(dataTypeName(ASTNodeDataType{ASTNodeDataType::vector_t, 2}) == "R^2");
REQUIRE(dataTypeName(ASTNodeDataType{ASTNodeDataType::vector_t, 3}) == "R^3");
}
SECTION("promotion")
......@@ -43,5 +50,55 @@ TEST_CASE("ASTNodeDataType", "[language]")
REQUIRE(dataTypePromotion(ASTNodeDataType::unsigned_int_t, ASTNodeDataType::string_t) ==
ASTNodeDataType::undefined_t);
REQUIRE(dataTypePromotion(ASTNodeDataType::double_t, ASTNodeDataType::string_t) == ASTNodeDataType::undefined_t);
REQUIRE(dataTypePromotion(ASTNodeDataType::bool_t, ASTNodeDataType::vector_t) == ASTNodeDataType::vector_t);
REQUIRE(dataTypePromotion(ASTNodeDataType::double_t, ASTNodeDataType::vector_t) == ASTNodeDataType::vector_t);
}
SECTION("getVectorDataType")
{
std::unique_ptr type_node = std::make_unique<ASTNode>();
type_node->set_type<language::vector_type>();
type_node->emplace_back(std::make_unique<ASTNode>());
{
std::unique_ptr dimension_node = std::make_unique<ASTNode>();
dimension_node->set_type<language::integer>();
dimension_node->source = "17";
auto& source = dimension_node->source;
dimension_node->m_begin = TAO_PEGTL_NAMESPACE::internal::iterator{&source[0]};
dimension_node->m_end = TAO_PEGTL_NAMESPACE::internal::iterator{&source[source.size()]};
type_node->emplace_back(std::move(dimension_node));
}
SECTION("good node")
{
REQUIRE(getVectorDataType(*type_node) == ASTNodeDataType::vector_t);
REQUIRE(getVectorDataType(*type_node).dimension() == 17);
}
SECTION("bad node type")
{
type_node->set_type<language::integer>();
REQUIRE_THROWS_WITH(getVectorDataType(*type_node), "unexpected node type");
}
SECTION("bad children size 1")
{
type_node->children.clear();
REQUIRE_THROWS_WITH(getVectorDataType(*type_node), "unexpected node type");
}
SECTION("bad children size 1")
{
type_node->children.emplace_back(std::unique_ptr<ASTNode>());
REQUIRE_THROWS_WITH(getVectorDataType(*type_node), "unexpected node type");
}
SECTION("bad dimension type")
{
type_node->children[1]->set_type<language::real>();
REQUIRE_THROWS_WITH(getVectorDataType(*type_node), "unexpected non integer constant dimension");
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment