diff --git a/ICD.Common.Utils.Tests/RecursionUtilsTest.cs b/ICD.Common.Utils.Tests/RecursionUtilsTest.cs index 08ad984..e87e74c 100644 --- a/ICD.Common.Utils.Tests/RecursionUtilsTest.cs +++ b/ICD.Common.Utils.Tests/RecursionUtilsTest.cs @@ -56,5 +56,17 @@ namespace ICD.Common.Utils.Tests Assert.IsNull(noPath); } + + /// + /// Test to ensure that when start and end node are the same, breadth first search returns that single node. + /// + [Test] + public void BreadthFirstSearchPathSingleNodeTest() + { + int[] path = RecursionUtils.BreadthFirstSearchPath(1, 1, Graph).ToArray(); + + Assert.AreEqual(1, path.Length); + Assert.AreEqual(1, path[0]); + } } } diff --git a/ICD.Common.Utils/RecursionUtils.cs b/ICD.Common.Utils/RecursionUtils.cs index 6c370da..fd491f4 100644 --- a/ICD.Common.Utils/RecursionUtils.cs +++ b/ICD.Common.Utils/RecursionUtils.cs @@ -69,6 +69,10 @@ namespace ICD.Common.Utils if (comparer == null) throw new ArgumentNullException("comparer"); + // Edge case - root and destination are the same + if (comparer.Equals(root, destination)) + return new[] {root}; + Queue queue = new Queue(); queue.Enqueue(root);