From 1b9d4f505364353b726cefd86d15b96ac11410ab Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Mon, 8 Jun 2020 18:40:06 +0200 Subject: [PATCH] Add missing tests for ASTNodeDataType --- tests/test_ASTNodeDataType.cpp | 158 +++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) diff --git a/tests/test_ASTNodeDataType.cpp b/tests/test_ASTNodeDataType.cpp index 215076d84..643cc51ce 100644 --- a/tests/test_ASTNodeDataType.cpp +++ b/tests/test_ASTNodeDataType.cpp @@ -27,6 +27,21 @@ TEST_CASE("ASTNodeDataType", "[language]") REQUIRE(dataTypeName(ASTNodeDataType::function_t) == "function"); REQUIRE(dataTypeName(ASTNodeDataType::builtin_function_t) == "builtin_function"); REQUIRE(dataTypeName(ASTNodeDataType::list_t) == "list"); + REQUIRE(dataTypeName(ASTNodeDataType{ASTNodeDataType::tuple_t, ASTNodeDataType{ASTNodeDataType::bool_t}}) == + "tuple(B)"); + REQUIRE(dataTypeName(ASTNodeDataType{ASTNodeDataType::tuple_t, ASTNodeDataType{ASTNodeDataType::unsigned_int_t}}) == + "tuple(N)"); + REQUIRE(dataTypeName(ASTNodeDataType{ASTNodeDataType::tuple_t, ASTNodeDataType{ASTNodeDataType::int_t}}) == + "tuple(Z)"); + REQUIRE(dataTypeName(ASTNodeDataType{ASTNodeDataType::tuple_t, ASTNodeDataType{ASTNodeDataType::double_t}}) == + "tuple(R)"); + REQUIRE(dataTypeName(ASTNodeDataType{ASTNodeDataType::tuple_t, ASTNodeDataType{ASTNodeDataType::double_t}}) == + "tuple(R)"); + + REQUIRE(dataTypeName(ASTNodeDataType{ASTNodeDataType::type_name_id_t, 1}) == "type_name_id"); + + REQUIRE(dataTypeName(ASTNodeDataType{ASTNodeDataType::type_id_t, "user_type"}) == "user_type"); + 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"); @@ -108,4 +123,147 @@ TEST_CASE("ASTNodeDataType", "[language]") REQUIRE_THROWS_WITH(getVectorDataType(*type_node), "unexpected non integer constant dimension"); } } + + SECTION("isNaturalConversion") + { + SECTION("-> B") + { + REQUIRE(isNaturalConversion(ASTNodeDataType::bool_t, ASTNodeDataType::bool_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::unsigned_int_t, ASTNodeDataType::bool_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::int_t, ASTNodeDataType::bool_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::double_t, ASTNodeDataType::bool_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::string_t, ASTNodeDataType::bool_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::tuple_t, ASTNodeDataType::bool_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::vector_t, ASTNodeDataType::bool_t)); + } + + SECTION("-> N") + { + REQUIRE(isNaturalConversion(ASTNodeDataType::bool_t, ASTNodeDataType::unsigned_int_t)); + REQUIRE(isNaturalConversion(ASTNodeDataType::unsigned_int_t, ASTNodeDataType::unsigned_int_t)); + REQUIRE(isNaturalConversion(ASTNodeDataType::int_t, ASTNodeDataType::unsigned_int_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::double_t, ASTNodeDataType::unsigned_int_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::string_t, ASTNodeDataType::unsigned_int_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::tuple_t, ASTNodeDataType::unsigned_int_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::vector_t, ASTNodeDataType::unsigned_int_t)); + } + + SECTION("-> Z") + { + REQUIRE(isNaturalConversion(ASTNodeDataType::bool_t, ASTNodeDataType::int_t)); + REQUIRE(isNaturalConversion(ASTNodeDataType::unsigned_int_t, ASTNodeDataType::int_t)); + REQUIRE(isNaturalConversion(ASTNodeDataType::int_t, ASTNodeDataType::int_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::double_t, ASTNodeDataType::int_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::string_t, ASTNodeDataType::int_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::tuple_t, ASTNodeDataType::int_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::vector_t, ASTNodeDataType::int_t)); + } + + SECTION("-> R") + { + REQUIRE(isNaturalConversion(ASTNodeDataType::bool_t, ASTNodeDataType::double_t)); + REQUIRE(isNaturalConversion(ASTNodeDataType::unsigned_int_t, ASTNodeDataType::double_t)); + REQUIRE(isNaturalConversion(ASTNodeDataType::int_t, ASTNodeDataType::double_t)); + REQUIRE(isNaturalConversion(ASTNodeDataType::double_t, ASTNodeDataType::double_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::string_t, ASTNodeDataType::double_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::tuple_t, ASTNodeDataType::double_t)); + REQUIRE(not isNaturalConversion(ASTNodeDataType::vector_t, ASTNodeDataType::double_t)); + } + + SECTION("-> string") + { + REQUIRE(isNaturalConversion(ASTNodeDataType::bool_t, ASTNodeDataType::string_t)); + REQUIRE(isNaturalConversion(ASTNodeDataType::unsigned_int_t, ASTNodeDataType::string_t)); + REQUIRE(isNaturalConversion(ASTNodeDataType::int_t, ASTNodeDataType::string_t)); + REQUIRE(isNaturalConversion(ASTNodeDataType::double_t, ASTNodeDataType::string_t)); + REQUIRE(isNaturalConversion(ASTNodeDataType::string_t, ASTNodeDataType::string_t)); + REQUIRE(isNaturalConversion(ASTNodeDataType::tuple_t, ASTNodeDataType::string_t)); + REQUIRE(isNaturalConversion(ASTNodeDataType::vector_t, ASTNodeDataType::string_t)); + } + + SECTION("-> tuple") + { + REQUIRE(isNaturalConversion(ASTNodeDataType::bool_t, + ASTNodeDataType{ASTNodeDataType::tuple_t, ASTNodeDataType{ASTNodeDataType::bool_t}})); + REQUIRE(isNaturalConversion(ASTNodeDataType::bool_t, + ASTNodeDataType{ASTNodeDataType::tuple_t, + ASTNodeDataType{ASTNodeDataType::unsigned_int_t}})); + REQUIRE( + not isNaturalConversion(ASTNodeDataType::int_t, + ASTNodeDataType{ASTNodeDataType::tuple_t, ASTNodeDataType{ASTNodeDataType::bool_t}})); + + REQUIRE(isNaturalConversion(ASTNodeDataType::unsigned_int_t, + ASTNodeDataType{ASTNodeDataType::tuple_t, + ASTNodeDataType{ASTNodeDataType::unsigned_int_t}})); + REQUIRE(isNaturalConversion(ASTNodeDataType::unsigned_int_t, + ASTNodeDataType{ASTNodeDataType::tuple_t, ASTNodeDataType{ASTNodeDataType::int_t}})); + REQUIRE(not isNaturalConversion(ASTNodeDataType::double_t, + ASTNodeDataType{ASTNodeDataType::tuple_t, + ASTNodeDataType{ASTNodeDataType::unsigned_int_t}})); + + REQUIRE( + isNaturalConversion(ASTNodeDataType::bool_t, + ASTNodeDataType{ASTNodeDataType::tuple_t, ASTNodeDataType{ASTNodeDataType::double_t}})); + REQUIRE(isNaturalConversion(ASTNodeDataType::int_t, ASTNodeDataType{ASTNodeDataType::tuple_t, + ASTNodeDataType{ASTNodeDataType::double_t}})); + REQUIRE( + isNaturalConversion(ASTNodeDataType::unsigned_int_t, + ASTNodeDataType{ASTNodeDataType::tuple_t, ASTNodeDataType{ASTNodeDataType::double_t}})); + REQUIRE( + isNaturalConversion(ASTNodeDataType::double_t, + ASTNodeDataType{ASTNodeDataType::tuple_t, ASTNodeDataType{ASTNodeDataType::double_t}})); + REQUIRE( + not isNaturalConversion(ASTNodeDataType::string_t, + ASTNodeDataType{ASTNodeDataType::tuple_t, ASTNodeDataType{ASTNodeDataType::double_t}})); + } + + SECTION("-> vector") + { + REQUIRE(not isNaturalConversion(ASTNodeDataType::bool_t, ASTNodeDataType{ASTNodeDataType::vector_t, 1})); + REQUIRE(not isNaturalConversion(ASTNodeDataType::unsigned_int_t, ASTNodeDataType{ASTNodeDataType::vector_t, 3})); + REQUIRE(not isNaturalConversion(ASTNodeDataType::int_t, ASTNodeDataType{ASTNodeDataType::vector_t, 2})); + REQUIRE(not isNaturalConversion(ASTNodeDataType::double_t, ASTNodeDataType{ASTNodeDataType::vector_t, 2})); + REQUIRE(not isNaturalConversion(ASTNodeDataType::string_t, ASTNodeDataType{ASTNodeDataType::vector_t, 3})); + REQUIRE(not isNaturalConversion(ASTNodeDataType::tuple_t, ASTNodeDataType{ASTNodeDataType::vector_t, 1})); + + REQUIRE(isNaturalConversion(ASTNodeDataType{ASTNodeDataType::vector_t, 1}, + ASTNodeDataType{ASTNodeDataType::vector_t, 1})); + REQUIRE(not isNaturalConversion(ASTNodeDataType{ASTNodeDataType::vector_t, 2}, + ASTNodeDataType{ASTNodeDataType::vector_t, 1})); + REQUIRE(not isNaturalConversion(ASTNodeDataType{ASTNodeDataType::vector_t, 3}, + ASTNodeDataType{ASTNodeDataType::vector_t, 1})); + + REQUIRE(not isNaturalConversion(ASTNodeDataType{ASTNodeDataType::vector_t, 1}, + ASTNodeDataType{ASTNodeDataType::vector_t, 2})); + REQUIRE(isNaturalConversion(ASTNodeDataType{ASTNodeDataType::vector_t, 2}, + ASTNodeDataType{ASTNodeDataType::vector_t, 2})); + REQUIRE(not isNaturalConversion(ASTNodeDataType{ASTNodeDataType::vector_t, 3}, + ASTNodeDataType{ASTNodeDataType::vector_t, 2})); + + REQUIRE(not isNaturalConversion(ASTNodeDataType{ASTNodeDataType::vector_t, 1}, + ASTNodeDataType{ASTNodeDataType::vector_t, 3})); + REQUIRE(not isNaturalConversion(ASTNodeDataType{ASTNodeDataType::vector_t, 2}, + ASTNodeDataType{ASTNodeDataType::vector_t, 3})); + REQUIRE(isNaturalConversion(ASTNodeDataType{ASTNodeDataType::vector_t, 3}, + ASTNodeDataType{ASTNodeDataType::vector_t, 3})); + } + + SECTION("-> type_id") + { + REQUIRE(not isNaturalConversion(ASTNodeDataType::bool_t, ASTNodeDataType{ASTNodeDataType::type_id_t, "foo"})); + REQUIRE( + not isNaturalConversion(ASTNodeDataType::unsigned_int_t, ASTNodeDataType{ASTNodeDataType::type_id_t, "foo"})); + REQUIRE(not isNaturalConversion(ASTNodeDataType::int_t, ASTNodeDataType{ASTNodeDataType::type_id_t, "foo"})); + REQUIRE(not isNaturalConversion(ASTNodeDataType::double_t, ASTNodeDataType{ASTNodeDataType::type_id_t, "foo"})); + REQUIRE(not isNaturalConversion(ASTNodeDataType::string_t, ASTNodeDataType{ASTNodeDataType::type_id_t, "foo"})); + REQUIRE(not isNaturalConversion(ASTNodeDataType::vector_t, ASTNodeDataType{ASTNodeDataType::type_id_t, "foo"})); + REQUIRE(not isNaturalConversion(ASTNodeDataType::tuple_t, ASTNodeDataType{ASTNodeDataType::type_id_t, "foo"})); + + REQUIRE(isNaturalConversion(ASTNodeDataType{ASTNodeDataType::type_id_t, "foo"}, + ASTNodeDataType{ASTNodeDataType::type_id_t, "foo"})); + + REQUIRE(not isNaturalConversion(ASTNodeDataType{ASTNodeDataType::type_id_t, "foo"}, + ASTNodeDataType{ASTNodeDataType::type_id_t, "bar"})); + } + } } -- GitLab