Exemplo n.º 1
0
        public void ShortestPathSearcher_Integration_CumulativeWeight()
        {
            string vertexA = "A", vertexB = "B", vertexC = "C";

            // Graph A-B=2, A-C=3, B-C=4
            AdjacencyList <string, int> graph = new AdjacencyList <string, int>();

            graph.AddVertex(vertexA);
            graph.AddVertex(vertexB);
            graph.AddVertex(vertexC);
            graph.AddEdge(vertexA, vertexB, 2);
            graph.AddEdge(vertexA, vertexC, 3);
            graph.AddEdge(vertexB, vertexC, 4);

            ShortestPathSearcher <string, int> searcher = new ShortestPathSearcher <string, int>(graph, vertexB, vertexC, (i) => i)
            {
                PathWeightCalculation = PathWeightCalculationType.Cumulative
            };
            IEnumerable <EdgeDescriptor <string, int> > path = searcher.FindShortestPath();

            Assert.IsNotNull(path);
            Assert.AreEqual(2, path.Count());
            EdgeDescriptor <string, int> edge1 = path.First();

            Assert.AreEqual("A", edge1.Vertex1);
            Assert.AreEqual("B", edge1.Vertex2);
            Assert.AreEqual(2, edge1.Edge);
            EdgeDescriptor <string, int> edge2 = path.Last();

            Assert.AreEqual("A", edge2.Vertex1);
            Assert.AreEqual("C", edge2.Vertex2);
            Assert.AreEqual(3, edge2.Edge);
        }
        public static EdgeDescriptor <TContext> OnFail <TContext>(this WorkflowConfiguration <TContext> config)
        {
            var edgeDescriptor = new EdgeDescriptor <TContext>(config, "Fail");

            edgeDescriptor.DeterminedAs((context, result) => result == ActivityResult.Failed);
            return(edgeDescriptor);
        }
Exemplo n.º 3
0
        public void ShortestPathSearcher_Integration_DefaultAggregativeWeight()
        {
            string vertexA = "A", vertexB = "B", vertexC = "C", vertexD = "D";

            // Graph A-B, A-C, B-D, B-A
            AdjacencyList <string, int> graph = new AdjacencyList <string, int>();

            graph.AddVertex(vertexA);
            graph.AddVertex(vertexB);
            graph.AddVertex(vertexC);
            graph.AddVertex(vertexD);
            graph.AddEdge(vertexA, vertexB, 10);
            graph.AddEdge(vertexB, vertexA, 5);
            graph.AddEdge(vertexA, vertexC, 20);
            graph.AddEdge(vertexB, vertexD, 10);

            ShortestPathSearcher <string, int>          searcher = new ShortestPathSearcher <string, int>(graph, vertexA, vertexD, (i) => i);
            IEnumerable <EdgeDescriptor <string, int> > path = searcher.FindShortestPath();

            Assert.IsNotNull(path);
            Assert.AreEqual(2, path.Count());
            EdgeDescriptor <string, int> firstDesc = path.First();

            Assert.AreEqual("B", firstDesc.Vertex1);
            Assert.AreEqual("A", firstDesc.Vertex2);
            Assert.AreEqual(5, firstDesc.Edge);
            EdgeDescriptor <string, int> lastDesc = path.Last();

            Assert.AreEqual("B", lastDesc.Vertex1);
            Assert.AreEqual("D", lastDesc.Vertex2);
            Assert.AreEqual(10, lastDesc.Edge);
        }
Exemplo n.º 4
0
        public void EdgeDescriptor_GetInvertedVertex_RaisesExceptionForUnknownVertex()
        {
            int    vertex1 = 10;
            int    vertex2 = 20;
            string edge    = "edge";

            EdgeDescriptor <int, string> edgeDescriptor = new EdgeDescriptor <int, string>(vertex1, vertex2, edge);

            edgeDescriptor.GetInvertedVertex(0);
        }
Exemplo n.º 5
0
        public void EdgeDescriptor_GetInvertedVertex_RaisesExceptionForUnknownVertex()
        {
            int    vertex1 = 10;
            int    vertex2 = 20;
            string edge    = "edge";

            EdgeDescriptor <int, string> edgeDescriptor = new EdgeDescriptor <int, string>(vertex1, vertex2, edge);

            Assert.Throws <InvalidOperationException>(() => edgeDescriptor.GetInvertedVertex(0));
        }
Exemplo n.º 6
0
        public void EdgeDescriptor_GetInvertedVertex_ReturnsOppositeVertex()
        {
            int    vertex1 = 10;
            int    vertex2 = 20;
            string edge    = "edge";

            EdgeDescriptor <int, string> edgeDescriptor = new EdgeDescriptor <int, string>(vertex1, vertex2, edge);

            Assert.AreEqual(vertex2, edgeDescriptor.GetInvertedVertex(vertex1));
            Assert.AreEqual(vertex1, edgeDescriptor.GetInvertedVertex(vertex2));
        }
Exemplo n.º 7
0
        public void EdgeDescriptor_IsVertex2_ReturnsTrueIfParameterIsVertex1()
        {
            int    vertex1 = 10;
            int    vertex2 = 20;
            string edge    = "edge";

            EdgeDescriptor <int, string> edgeDescriptor = new EdgeDescriptor <int, string>(vertex1, vertex2, edge);

            Assert.IsTrue(edgeDescriptor.IsVertex2(20));
            Assert.IsFalse(edgeDescriptor.IsVertex2(5));
        }
Exemplo n.º 8
0
        public void VertexDescriptor_AddEdge_FailsByAttemptToAddEdgeWithWrongVertices()
        {
            int vertex1 = 10;
            int vertex2 = 20;
            int vertex3 = 30;

            VertexDescriptor <int, string> vertexDescriptor = new VertexDescriptor <int, string>(vertex3);
            EdgeDescriptor <int, string>   edgeDesciptor    = new EdgeDescriptor <int, string>(vertex1, vertex2, "edge");

            vertexDescriptor.AddEdge(edgeDesciptor);
        }
Exemplo n.º 9
0
        public void VertexDescriptor_RemoveEdge_NoExceptionIfListIsEmpty()
        {
            VertexDescriptor <int, string> vertexDescriptor = new VertexDescriptor <int, string>(10);

            Assert.Empty(vertexDescriptor.Edges);

            EdgeDescriptor <int, string> edgeDesciptor = new EdgeDescriptor <int, string>(20, 30, "edge");

            vertexDescriptor.RemoveEdge(edgeDesciptor);

            Assert.Empty(vertexDescriptor.Edges);
        }
Exemplo n.º 10
0
        public void VertexDescriptor_AddEdge_FailsByAttemptToAddEdgeWithWrongVertices()
        {
            int vertex1 = 10;
            int vertex2 = 20;
            int vertex3 = 30;

            VertexDescriptor <int, string> vertexDescriptor = new VertexDescriptor <int, string>(vertex3);
            EdgeDescriptor <int, string>   edgeDesciptor    = new EdgeDescriptor <int, string>(vertex1, vertex2, "edge");
            var exception = Assert.Throws <InvalidOperationException>(() => vertexDescriptor.AddEdge(edgeDesciptor));

            Assert.Equal("Vertex '30' does not belong to the current edge that contains '10' and '20'", exception.Message);
        }
Exemplo n.º 11
0
        public void VertexDescriptor_AddEdge_AddsDescriptorToEdges()
        {
            int vertex1 = 10;
            int vertex2 = 20;
            VertexDescriptor <int, string> vertexDescriptor = new VertexDescriptor <int, string>(vertex1);

            Assert.Empty(vertexDescriptor.Edges);
            EdgeDescriptor <int, string> edgeDesciptor = new EdgeDescriptor <int, string>(vertex1, vertex2, "edge");

            vertexDescriptor.AddEdge(edgeDesciptor);
            Assert.Contains(edgeDesciptor, vertexDescriptor.Edges);
        }
Exemplo n.º 12
0
        public void VertexDescriptor_RemoveEdge_FailsByAttemptToAddEdgeWithWrongVertices()
        {
            VertexDescriptor <int, string> vertexDescriptor = new VertexDescriptor <int, string>(10);
            EdgeDescriptor <int, string>   edgeDesciptor    = new EdgeDescriptor <int, string>(10, 20, "edge");

            vertexDescriptor.AddEdge(edgeDesciptor);
            Assert.AreEqual(1, vertexDescriptor.Edges.Count());

            EdgeDescriptor <int, string> unrelatedEdgeDesciptor = new EdgeDescriptor <int, string>(100, 200, "edge");

            vertexDescriptor.AddEdge(unrelatedEdgeDesciptor);
        }
Exemplo n.º 13
0
        public void VertexDescriptor_AddEdge_AddsDescriptorToEdges()
        {
            int vertex1 = 10;
            int vertex2 = 20;
            VertexDescriptor <int, string> vertexDescriptor = new VertexDescriptor <int, string>(vertex1);

            Assert.AreEqual(0, vertexDescriptor.Edges.Count());
            EdgeDescriptor <int, string> edgeDesciptor = new EdgeDescriptor <int, string>(vertex1, vertex2, "edge");

            vertexDescriptor.AddEdge(edgeDesciptor);
            Assert.IsTrue(vertexDescriptor.Edges.Contains(edgeDesciptor));
        }
Exemplo n.º 14
0
        public void EdgeDescriptor_Contructor_Populates_Properties()
        {
            int    vertex1 = 10;
            int    vertex2 = 20;
            string edge    = "edge";

            EdgeDescriptor <int, string> edgeDescriptor = new EdgeDescriptor <int, string>(vertex1, vertex2, edge);

            Assert.AreEqual(vertex1, edgeDescriptor.Vertex1);
            Assert.AreEqual(vertex2, edgeDescriptor.Vertex2);
            Assert.AreEqual(edge, edgeDescriptor.Edge);
        }
Exemplo n.º 15
0
        public void VertexDescriptor_RemoveEdge_FailsByAttemptToAddEdgeWithWrongVertices()
        {
            VertexDescriptor <int, string> vertexDescriptor = new VertexDescriptor <int, string>(10);
            EdgeDescriptor <int, string>   edgeDesciptor    = new EdgeDescriptor <int, string>(10, 20, "edge");

            vertexDescriptor.AddEdge(edgeDesciptor);
            Assert.Single(vertexDescriptor.Edges);

            EdgeDescriptor <int, string> unrelatedEdgeDesciptor = new EdgeDescriptor <int, string>(100, 200, "edge");
            var exception = Assert.Throws <InvalidOperationException>(() => vertexDescriptor.AddEdge(unrelatedEdgeDesciptor));

            Assert.Equal("Vertex '10' does not belong to the current edge that contains '100' and '200'", exception.Message);
        }
Exemplo n.º 16
0
        public void VertexDescriptor_RemoveEdge_RemovesEdgeFromVertex()
        {
            int vertex1 = 10;
            int vertex2 = 20;
            VertexDescriptor <int, string> vertexDescriptor = new VertexDescriptor <int, string>(vertex1);
            EdgeDescriptor <int, string>   edgeDesciptor    = new EdgeDescriptor <int, string>(vertex1, vertex2, "edge");

            vertexDescriptor.AddEdge(edgeDesciptor);

            Assert.Contains(edgeDesciptor, vertexDescriptor.Edges);

            vertexDescriptor.RemoveEdge(edgeDesciptor);
            Assert.DoesNotContain(edgeDesciptor, vertexDescriptor.Edges);
        }
Exemplo n.º 17
0
        public void VertexDescriptor_TryFindEdge_ReturnsEdgeByVertex()
        {
            int vertex1 = 10;
            int vertex2 = 20;
            VertexDescriptor <int, string> vertexDescriptor = new VertexDescriptor <int, string>(vertex1);
            EdgeDescriptor <int, string>   edgeDesciptor    = new EdgeDescriptor <int, string>(vertex1, vertex2, "edge");

            vertexDescriptor.AddEdge(edgeDesciptor);

            EdgeDescriptor <int, string> foundEdge;
            bool result = vertexDescriptor.TryFindEdge(vertex1, vertex2, out foundEdge);

            Assert.True(result);
            Assert.Equal(foundEdge, edgeDesciptor);
        }
Exemplo n.º 18
0
        public void VertexDescriptor_TryFindEdge_ReturnsFalseForWrongVertex()
        {
            int vertex1 = 10;
            int vertex2 = 20;
            VertexDescriptor <int, string> vertexDescriptor = new VertexDescriptor <int, string>(vertex1);
            EdgeDescriptor <int, string>   edgeDesciptor    = new EdgeDescriptor <int, string>(vertex1, vertex2, "edge");

            vertexDescriptor.AddEdge(edgeDesciptor);

            EdgeDescriptor <int, string> foundEdge;
            bool result = vertexDescriptor.TryFindEdge(vertex2, vertex1, out foundEdge);

            Assert.False(result);
            Assert.Equal(default(EdgeDescriptor <int, string>), foundEdge);
        }
Exemplo n.º 19
0
        public void ReadOnlyGraph_Coontructor_PopulatesEdgesAndVertices()
        {
            int    vertex1 = 10;
            int    vertex2 = 20;
            int    vertex3 = 30;
            string edge1   = "edge1";
            string edge2   = "edge2";

            EdgeDescriptor <int, string> edgeDescriptor1 = new EdgeDescriptor <int, string>(vertex1, vertex2, edge1);
            EdgeDescriptor <int, string> edgeDescriptor2 = new EdgeDescriptor <int, string>(vertex1, vertex3, edge2);

            IEnumerable <EdgeDescriptor <int, string> > edges = new List <EdgeDescriptor <int, string> >()
            {
                edgeDescriptor1, edgeDescriptor2
            };
            ReadOnlyGraph <int, string> readOnlyGraph = new ReadOnlyGraph <int, string>(edges);

            Assert.AreEqual(3, readOnlyGraph.NumVertices);
            Assert.IsTrue(readOnlyGraph.HasVertex(vertex1));
            Assert.IsTrue(readOnlyGraph.HasVertex(vertex2));
            Assert.IsTrue(readOnlyGraph.HasVertex(vertex3));
            Assert.AreEqual(edge1, readOnlyGraph.FindEdge(vertex1, vertex2));
            Assert.AreEqual(edge2, readOnlyGraph.FindEdge(vertex1, vertex3));
        }