test: add HierarchyCache test for diamond inheritance and fix cyclic inheritance test

This commit is contained in:
mlangkabel
2021-02-23 23:12:16 +01:00
parent 7d344fb08e
commit 5a2b0fd591
+27 -2
View File
@@ -56,7 +56,7 @@ TEST_CASE("HierarchyCache returns no inheritance edges for empty node set")
REQUIRE(inheritanceEdges.size() == 0);
}
TEST_CASE("HierarchyCache returns inheritance edge for non-empty node set")
TEST_CASE("HierarchyCache returns direct inheritance edge for non-empty node set")
{
HierarchyCache cache;
cache.createInheritance(1, 1, 2);
@@ -65,6 +65,17 @@ TEST_CASE("HierarchyCache returns inheritance edge for non-empty node set")
REQUIRE(utility::containsElement(inheritanceEdges, TestEdge(1, 2, {1}).toString()));
}
TEST_CASE("HierarchyCache returns multiple indirect inheritance edges for non-empty node set")
{
HierarchyCache cache;
cache.createInheritance(1, 1, 2);
cache.createInheritance(2, 2, 3);
std::vector<std::string> inheritanceEdges = getSerializedInheritanceEdges(cache, 1, {1, 2, 3});
REQUIRE(inheritanceEdges.size() == 2);
REQUIRE(utility::containsElement(inheritanceEdges, TestEdge(1, 2, {1}).toString()));
REQUIRE(utility::containsElement(inheritanceEdges, TestEdge(1, 3, {1, 2}).toString()));
}
TEST_CASE("HierarchyCache skips inheritance for nodes not in set")
{
HierarchyCache cache;
@@ -82,6 +93,20 @@ TEST_CASE("HierarchyCache returns inheritance edges for cyclic inheritance")
cache.createInheritance(2, 2, 1);
std::vector<std::string> inheritanceEdges = getSerializedInheritanceEdges(cache, 1, {1, 2});
REQUIRE(inheritanceEdges.size() == 2);
REQUIRE(utility::containsElement(inheritanceEdges, TestEdge(1, 2, {1}).toString()));
REQUIRE(utility::containsElement(inheritanceEdges, TestEdge(1, 2, {1, 2}).toString()));
REQUIRE(utility::containsElement(inheritanceEdges, TestEdge(1, 1, {1, 2}).toString()));
}
TEST_CASE("HierarchyCache returns inheritance edges for diamond inheritance")
{
HierarchyCache cache;
cache.createInheritance(1, 1, 2);
cache.createInheritance(2, 1, 3);
cache.createInheritance(3, 2, 4);
cache.createInheritance(4, 3, 4);
std::vector<std::string> inheritanceEdges = getSerializedInheritanceEdges(cache, 1, {1, 2, 3, 4});
REQUIRE(inheritanceEdges.size() == 3);
REQUIRE(utility::containsElement(inheritanceEdges, TestEdge(1, 2, {1}).toString()));
REQUIRE(utility::containsElement(inheritanceEdges, TestEdge(1, 3, {2}).toString()));
REQUIRE(utility::containsElement(inheritanceEdges, TestEdge(1, 4, {1, 2, 3, 4}).toString()));
}