Пример #1
0
        public void ShouldThrowOnMissingStartNode()
        {
            InMemoryDataProvider dataProvider = new InMemoryDataProvider(new List <INode> {
                new Node("nEnd")
            }, new List <IEdge>());
            Func <Task> func = async() => await dataProvider.ShortestPaths("nStart", "nEnd");

            func
            .Should()
            .Throw <ArgumentNullException>();
        }
Пример #2
0
        public async Task ShouldHandleMissingNodes()
        {
            var nStart = new Node("nStart", incomingEdgeIds: new List <string> {
                "e2"
            }, outgoingEdgeIds: new List <string> {
                "e1"
            });
            var n1 = new Node("n1", incomingEdgeIds: new List <string> {
                "e6"
            }, outgoingEdgeIds: new List <string> {
                "e2", "e4", "e7"
            });
            var n2 = new Node("n2", incomingEdgeIds: new List <string> {
                "e1", "e3", "e7"
            }, outgoingEdgeIds: new List <string> {
                "e6"
            });
            var n3 = new Node("n3", incomingEdgeIds: new List <string> {
                "e4"
            }, outgoingEdgeIds: new List <string> {
                "e3", "e5"
            });
            var nEnd = new Node("nEnd", incomingEdgeIds: new List <string> {
                "e5"
            }, outgoingEdgeIds: new List <string> {
            });
            var e1 = new Edge("e1", "nStart", "n2");
            var e2 = new Edge("e2", "n1", "nStart");
            var e3 = new Edge("e3", "n3", "n2");
            var e4 = new Edge("e4", "n1", "n3");
            var e5 = new Edge("e5", "n3", "nEnd");
            var e6 = new Edge("e6", "n2", "n1");
            var e7 = new Edge("e7", "n1", "n2");

            var inMemoryProvider = new InMemoryDataProvider(
                new INode[] { nStart, n2, n3, nEnd },
                new IEdge[] { e1, e2, e3, e4, e5, e6, e7 });

            var result = await inMemoryProvider.ShortestPaths("nStart", "nEnd");

            result
            .Should()
            .BeEquivalentTo(new IPath[]
            {
                new Path(new IGraphObject[] { nStart, e1, n2, e3, n3, e5, nEnd })
            }, options => options.WithStrictOrderingFor(x => x.NodesAndEdges));
        }
Пример #3
0
        public async Task ShouldHandleNoConenction()
        {
            var n1 = new Node("nStart", new List <string> {
                "e1"
            });
            var n2             = new Node("nEnd");
            var e1             = new Edge("e1", "nStart", "nStart");
            var expectedResult = new IPath[0];

            InMemoryDataProvider dataProvider = new InMemoryDataProvider(new List <INode> {
                n1, n2
            }, new List <IEdge> {
                e1
            });
            var result = await dataProvider.ShortestPaths("nStart", "nEnd");

            result
            .Should()
            .BeEquivalentTo(expectedResult, options => options.WithStrictOrderingFor(x => x.NodesAndEdges));
        }
Пример #4
0
        public async Task ShouldFindPaths(IEnumerable <INode> nodes, IEnumerable <IEdge> edges, IEnumerable <IPath> expectedResult)
        {
            _output.WriteLine($"Excepted ({expectedResult.Count()}):");
            foreach (var path in expectedResult)
            {
                _output.WriteLine(path.DebugOutput());
            }

            InMemoryDataProvider dataProvider = new InMemoryDataProvider(nodes, edges);
            var result = await dataProvider.ShortestPaths("nStart", "nEnd");

            _output.WriteLine($"Result ({result.Count()}): ");
            foreach (var path in result)
            {
                _output.WriteLine(path.DebugOutput());
            }

            result
            .Should()
            .BeEquivalentTo(expectedResult, options => options.WithStrictOrderingFor(x => x.NodesAndEdges));
        }
Пример #5
0
        public async Task ShouldHandleMissingEdges()
        {
            var nStart = new Node("nStart", new List <string> {
                "e2"
            }, new List <string> {
                "e1"
            });
            var nEnd = new Node("nEnd", new List <string> {
                "e1"
            }, new List <string> {
                "e2"
            });
            var e1 = new Edge("e1", "nStart", "nEnd");
            var e2 = new Edge("e2", "nEnd", "nStart");
            var inMemoryProvider = new InMemoryDataProvider(new INode[] { nStart, nEnd }, new IEdge[] { e1 });
            var result           = await inMemoryProvider.ShortestPaths("nStart", "nEnd");

            result
            .Should()
            .BeEquivalentTo(new IPath[]
            {
                new Path(new IGraphObject[] { nStart, e1, nEnd })
            }, options => options.WithStrictOrderingFor(x => x.NodesAndEdges));
        }