public void ComplexGraph()
 {
     SetDefaultWeights();
     var aB       = new TestEdge(A, B);
     var bC       = new TestEdge(B, C);
     var aD       = new TestEdge(A, D);
     var dC       = new TestEdge(D, C);
     var cE       = new TestEdge(C, E);
     var bE       = new TestEdge(B, E);
     var vertices = new HashSet <TestVertex>()
     {
         A, B, C, D, E
     }.ToImmutableHashSet();
     var edges = new HashSet <TestEdge>()
     {
         aB, bC, aD, dC, cE, bE
     }.ToImmutableHashSet();
     var graph       = new TestAdjacencyListsGraph(vertices, edges);
     var riskProfile = new Dictionary <TestEdge, int>()
     {
         { aB, 0 }, { bC, 0 }, { aD, 1 }, { dC, 1 }, { cE, 2 }, { bE, 3 },
     }.ToImmutableDictionary();
     var search = new TestSrlgGraphSearch(4, riskProfile);
     var paths  = search.Search(graph, A, E, Weigher).Paths;
 }
        public void NoPath()
        {
            SetDefaultWeights();
            var aB       = new TestEdge(A, B);
            var bC       = new TestEdge(B, C);
            var aD       = new TestEdge(A, D);
            var dC       = new TestEdge(D, C);
            var vertices = new HashSet <TestVertex>()
            {
                A, B, C, D, E
            }.ToImmutableHashSet();
            var edges = new HashSet <TestEdge>()
            {
                aB, bC, aD, dC
            }.ToImmutableHashSet();
            var graph       = new TestAdjacencyListsGraph(vertices, edges);
            var riskProfile = new Dictionary <TestEdge, int>()
            {
                { aB, 0 }, { bC, 0 }, { aD, 1 }, { dC, 0 },
            }.ToImmutableDictionary();
            var search = new TestSrlgGraphSearch(2, riskProfile);
            var paths  = search.Search(graph, A, E, Weigher).Paths;

            Console.WriteLine(paths);
            Assert.Empty(paths);
        }
        public void OnePathPair()
        {
            SetDefaultWeights();
            var aB       = new TestEdge(A, B);
            var bC       = new TestEdge(B, C);
            var aD       = new TestEdge(A, D);
            var dC       = new TestEdge(D, C);
            var vertices = new HashSet <TestVertex>()
            {
                A, B, C, D
            }.ToImmutableHashSet();
            var edges = new HashSet <TestEdge>()
            {
                aB, bC, aD, dC
            }.ToImmutableHashSet();
            var graph       = new TestAdjacencyListsGraph(vertices, edges);
            var riskProfile = new Dictionary <TestEdge, int>()
            {
                { aB, 0 }, { bC, 0 }, { aD, 1 }, { dC, 1 },
            }.ToImmutableDictionary();
            var search = new TestSrlgGraphSearch(2, riskProfile);
            var paths  = search.Search(graph, A, C, Weigher).Paths;

            Console.WriteLine($"\n\n\n{paths}\n\n\n");
            Assert.Single(paths);
            CheckIsDisjoint(paths.First(), riskProfile);
        }
        public void MultiplePathGraph()
        {
            SetDefaultWeights();
            var aB       = new TestEdge(A, B);
            var bE       = new TestEdge(B, E);
            var aD       = new TestEdge(A, D);
            var dE       = new TestEdge(D, E);
            var aC       = new TestEdge(A, C);
            var cE       = new TestEdge(C, E);
            var vertices = new HashSet <TestVertex>()
            {
                A, B, C, D, E,
            }.ToImmutableHashSet();
            var edges = new HashSet <TestEdge>()
            {
                aB, bE, aD, dE, aC, cE
            }.ToImmutableHashSet();
            var graph       = new TestAdjacencyListsGraph(vertices, edges);
            var riskProfile = new Dictionary <TestEdge, int>()
            {
                { aB, 0 }, { bE, 1 }, { aD, 2 }, { dE, 3 }, { aC, 4 }, { cE, 5 }
            }.ToImmutableDictionary();
            var search = new TestSrlgGraphSearch(6, riskProfile);
            var paths  = search.Search(graph, A, E, Weigher).Paths;

            Assert.True(paths.Count >= 1);
            CheckIsDisjoint(paths.First(), riskProfile);
        }