Skip to content
This repository has been archived by the owner on Dec 14, 2021. It is now read-only.

Commit

Permalink
test: add HierarchyCache test for diamond inheritance and fix cyclic …
Browse files Browse the repository at this point in the history
…inheritance test
  • Loading branch information
mlangkabel committed Feb 23, 2021
1 parent 7d344fb commit 5a2b0fd
Showing 1 changed file with 27 additions and 2 deletions.
29 changes: 27 additions & 2 deletions src/test/HierarchyCacheTestSuite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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;
Expand All @@ -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()));
}

0 comments on commit 5a2b0fd

Please sign in to comment.