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); }
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); }
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); }
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)); }
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)); }
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)); }
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); }
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); }
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); }
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); }
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); }
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)); }
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); }
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); }
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); }
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); }
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); }
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)); }