public void FindShortestPath_FirstShortestNotTheBest_2levels_MatchExpectations()
        {
            #region setup
            var start = new DijkstraShortestPath.Vertex(1);
            var l11   = new DijkstraShortestPath.Vertex(2);
            var l12   = new DijkstraShortestPath.Vertex(3);
            var l21   = new DijkstraShortestPath.Vertex(4);
            var l22   = new DijkstraShortestPath.Vertex(5);
            var end   = new DijkstraShortestPath.Vertex(6);

            start.Edges.AddRange(new []
            {
                new DijkstraShortestPath.Edge(30)
                {
                    End = l11
                },
                new DijkstraShortestPath.Edge(20)
                {
                    End = l12
                },
            });

            l11.Edges.Add(new DijkstraShortestPath.Edge(60)
            {
                End = l21
            });
            l12.Edges.Add(new DijkstraShortestPath.Edge(50)
            {
                End = l22
            });

            l21.Edges.Add(new DijkstraShortestPath.Edge(10)
            {
                End = end
            });
            l22.Edges.Add(new DijkstraShortestPath.Edge(40)
            {
                End = end
            });
            #endregion setup

            var path = DijkstraShortestPath.FindShortestPath(start, end);

            using var scope = new AssertionScope();
            path.Select(p => p.Item2).Sum().Should().Be(100);
            path[0].Item1.Data.Should().Be(1);
            path[1].Item1.Data.Should().Be(2);
            path[2].Item1.Data.Should().Be(4);
            path[3].Item1.Data.Should().Be(6);
        }
        public void FindShortestPath_Straightforward_MatchExpectations()
        {
            #region setup
            var start = new DijkstraShortestPath.Vertex(1);
            var l11   = new DijkstraShortestPath.Vertex(2);
            var l12   = new DijkstraShortestPath.Vertex(3);
            var end   = new DijkstraShortestPath.Vertex(4);

            start.Edges.AddRange(new []
            {
                new DijkstraShortestPath.Edge(10)
                {
                    End = l11
                },
                new DijkstraShortestPath.Edge(20)
                {
                    End = l12
                },
            });

            l11.Edges.Add(new DijkstraShortestPath.Edge(30)
            {
                End = end
            });
            l12.Edges.Add(new DijkstraShortestPath.Edge(40)
            {
                End = end
            });
            #endregion setup

            var path = DijkstraShortestPath.FindShortestPath(start, end);

            using var scope = new AssertionScope();
            path.Select(p => p.Item2).Sum().Should().Be(40);
            path[0].Item1.Data.Should().Be(1);
            path[1].Item1.Data.Should().Be(2);
            path[2].Item1.Data.Should().Be(4);
        }