Select Git revision
LinearSolverModule.hpp
test_ASTNodeNaturalConversionChecker.cpp 90.67 KiB
#include <catch2/catch.hpp>
#include <language/PEGGrammar.hpp>
#include <language/ast/ASTNode.hpp>
#include <language/utils/ASTNodeNaturalConversionChecker.hpp>
namespace language
{
struct integer;
}
// clazy:excludeall=non-pod-global-static
TEST_CASE("ASTNodeNaturalConversionChecker", "[language]")
{
const ASTNodeDataType undefined_dt = ASTNodeDataType{};
const ASTNodeDataType bool_dt = ASTNodeDataType::build<ASTNodeDataType::bool_t>();
const ASTNodeDataType unsigned_int_dt = ASTNodeDataType::build<ASTNodeDataType::unsigned_int_t>();
const ASTNodeDataType int_dt = ASTNodeDataType::build<ASTNodeDataType::int_t>();
const ASTNodeDataType double_dt = ASTNodeDataType::build<ASTNodeDataType::double_t>();
const ASTNodeDataType string_dt = ASTNodeDataType::build<ASTNodeDataType::string_t>();
const ASTNodeDataType void_dt = ASTNodeDataType::build<ASTNodeDataType::void_t>();
const ASTNodeDataType function_dt = ASTNodeDataType::build<ASTNodeDataType::function_t>();
const ASTNodeDataType builtin_function_dt = ASTNodeDataType::build<ASTNodeDataType::builtin_function_t>();
std::vector<std::shared_ptr<const ASTNodeDataType>> type_list;
type_list.push_back(std::make_shared<const ASTNodeDataType>(double_dt));
type_list.push_back(std::make_shared<const ASTNodeDataType>(int_dt));
const ASTNodeDataType list_dt = ASTNodeDataType::build<ASTNodeDataType::list_t>(type_list);
SECTION("Valid conversions")
{
std::unique_ptr data_node = std::make_unique<ASTNode>();
SECTION("-> string")
{
SECTION("string -> string")
{
data_node->m_data_type = string_dt;
REQUIRE_NOTHROW(ASTNodeNaturalConversionChecker{*data_node, string_dt});
}
SECTION("R^d -> string")
{
data_node->m_data_type = ASTNodeDataType::build<ASTNodeDataType::vector_t>(5);
REQUIRE_NOTHROW(ASTNodeNaturalConversionChecker{*data_node, string_dt});
}
SECTION("R -> string")
{
data_node->m_data_type = double_dt;
REQUIRE_NOTHROW(ASTNodeNaturalConversionChecker{*data_node, string_dt});
}
SECTION("Z -> string")
{
data_node->m_data_type = int_dt;
REQUIRE_NOTHROW(ASTNodeNaturalConversionChecker{*data_node, string_dt});
}
SECTION("N -> string")
{
data_node->m_data_type = unsigned_int_dt;
REQUIRE_NOTHROW(ASTNodeNaturalConversionChecker{*data_node, string_dt});
}
SECTION("B -> string")
{
data_node->m_data_type = bool_dt;