From 5a2b0fd5917ff871245d0bf2e9d7d8d646020d97 Mon Sep 17 00:00:00 2001 From: mlangkabel Date: Tue, 23 Feb 2021 23:12:16 +0100 Subject: [PATCH] test: add HierarchyCache test for diamond inheritance and fix cyclic inheritance test --- src/test/HierarchyCacheTestSuite.cpp | 29 ++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/test/HierarchyCacheTestSuite.cpp b/src/test/HierarchyCacheTestSuite.cpp index 6fb02642..05403cab 100644 --- a/src/test/HierarchyCacheTestSuite.cpp +++ b/src/test/HierarchyCacheTestSuite.cpp @@ -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 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 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 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())); +}