diff --git a/ICD.Common.Utils.Tests/RecursionUtilsTest.cs b/ICD.Common.Utils.Tests/RecursionUtilsTest.cs index 6e2896f..e50e025 100644 --- a/ICD.Common.Utils.Tests/RecursionUtilsTest.cs +++ b/ICD.Common.Utils.Tests/RecursionUtilsTest.cs @@ -127,6 +127,24 @@ namespace ICD.Common.Utils.Tests Assert.IsTrue(clique.Contains(6)); } + [Test] + public void GetCliqueSingleNodeTest() + { + int[] clique = RecursionUtils.GetClique(s_CliqueGraph.Keys, 1, n => s_CliqueGraph[n]).ToArray(); + + Assert.AreEqual(4, clique.Length); + Assert.IsTrue(clique.Contains(1)); + Assert.IsTrue(clique.Contains(2)); + Assert.IsTrue(clique.Contains(3)); + Assert.IsTrue(clique.Contains(4)); + + clique = RecursionUtils.GetClique(s_CliqueGraph.Keys, 5, n => s_CliqueGraph[n]).ToArray(); + + Assert.AreEqual(2, clique.Length); + Assert.IsTrue(clique.Contains(5)); + Assert.IsTrue(clique.Contains(6)); + } + [Test] public void BreadthFirstSearchTest() { diff --git a/ICD.Common.Utils/RecursionUtils.cs b/ICD.Common.Utils/RecursionUtils.cs index 06890b9..826f35f 100644 --- a/ICD.Common.Utils/RecursionUtils.cs +++ b/ICD.Common.Utils/RecursionUtils.cs @@ -32,6 +32,20 @@ namespace ICD.Common.Utils .Select(node => GetClique(map, visited, node)); } + /// + /// Gets the clique containing the given node. + /// + /// + /// + /// + /// + /// + public static IEnumerable GetClique(IEnumerable nodes, T node, Func> getAdjacent) + { + Dictionary> map = nodes.ToDictionary(n => n, getAdjacent); + return GetClique(map, node); + } + /// /// Gets the clique containing the given node. ///