public void OutEdge_Throws() { var graph1 = new TransitionFactoryImplicitGraph <CloneableTestVertex, Edge <CloneableTestVertex> >(); OutEdge_NullThrows_Test(graph1); var graph2 = new TransitionFactoryImplicitGraph <CloneableTestVertex, Edge <CloneableTestVertex> >(); var vertex1 = new CloneableTestVertex("1"); var vertex2 = new CloneableTestVertex("2"); // ReSharper disable ReturnValueOfPureMethodIsNotUsed Assert.Throws <VertexNotFoundException>(() => graph2.OutEdge(vertex1, 0)); var factory1 = new TestTransitionFactory <CloneableTestVertex>( vertex1, Enumerable.Empty <Edge <CloneableTestVertex> >()); graph2.AddTransitionFactory(factory1); graph2.AddTransitionFactory( new TestTransitionFactory <CloneableTestVertex>(vertex2, Enumerable.Empty <Edge <CloneableTestVertex> >())); AssertIndexOutOfRange(() => graph2.OutEdge(vertex1, 0)); graph2.RemoveTransitionFactory(factory1); graph2.AddTransitionFactory( new TestTransitionFactory <CloneableTestVertex>(vertex1, new[] { new Edge <CloneableTestVertex>(vertex1, vertex2) })); AssertIndexOutOfRange(() => graph2.OutEdge(vertex1, 5)); // ReSharper restore ReturnValueOfPureMethodIsNotUsed }
public void OutEdge_WithFilter() { var graph = new TransitionFactoryImplicitGraph <CloneableTestVertex, Edge <CloneableTestVertex> >(); var vertex1 = new CloneableTestVertex("1"); var vertex2 = new CloneableTestVertex("2"); var vertex3 = new CloneableTestVertex("3"); var vertex4 = new CloneableTestVertex("4"); var vertex5 = new CloneableTestVertex("5"); var vertex6 = new CloneableTestVertex("6"); var vertex7 = new CloneableTestVertex("7"); var edge11 = new Edge <CloneableTestVertex>(vertex1, vertex1); var edge12 = new Edge <CloneableTestVertex>(vertex1, vertex2); var edge13 = new Edge <CloneableTestVertex>(vertex1, vertex3); var edge54 = new Edge <CloneableTestVertex>(vertex5, vertex4); var edge61 = new Edge <CloneableTestVertex>(vertex6, vertex1); var edge67 = new Edge <CloneableTestVertex>(vertex6, vertex7); graph.AddTransitionFactory( new TestTransitionFactory <CloneableTestVertex>(new[] { new TestTransitionFactory <CloneableTestVertex> .VertexEdgesSet(vertex1, new[] { edge11, edge12, edge13 }), new TestTransitionFactory <CloneableTestVertex> .VertexEdgesSet(vertex5, new[] { edge54 }), new TestTransitionFactory <CloneableTestVertex> .VertexEdgesSet(vertex6, new[] { edge61, edge67 }), })); graph.SuccessorVertexPredicate = vertex => vertex != vertex4; graph.SuccessorEdgePredicate = edge => edge != edge61; Assert.AreSame(edge11, graph.OutEdge(vertex1, 0)); Assert.AreSame(edge13, graph.OutEdge(vertex1, 2)); // ReSharper disable ReturnValueOfPureMethodIsNotUsed AssertIndexOutOfRange(() => graph.OutEdge(vertex5, 0)); // Filtered Assert.AreSame(edge67, graph.OutEdge(vertex6, 0)); // Because of the filter AssertIndexOutOfRange(() => graph.OutEdge(vertex6, 1)); // Filtered // ReSharper restore ReturnValueOfPureMethodIsNotUsed // Restore no filter graph.SuccessorVertexPredicate = vertex => true; graph.SuccessorEdgePredicate = edge => true; Assert.AreSame(edge54, graph.OutEdge(vertex5, 0)); Assert.AreSame(edge61, graph.OutEdge(vertex6, 0)); Assert.AreSame(edge67, graph.OutEdge(vertex6, 1)); }
public void OutEdge() { var graph = new TransitionFactoryImplicitGraph <CloneableTestVertex, Edge <CloneableTestVertex> >(); var vertex1 = new CloneableTestVertex("1"); var vertex2 = new CloneableTestVertex("2"); var vertex3 = new CloneableTestVertex("3"); var vertex4 = new CloneableTestVertex("4"); var edge11 = new Edge <CloneableTestVertex>(vertex1, vertex1); var edge12 = new Edge <CloneableTestVertex>(vertex1, vertex2); var edge13 = new Edge <CloneableTestVertex>(vertex1, vertex3); var edge24 = new Edge <CloneableTestVertex>(vertex2, vertex4); var edge33 = new Edge <CloneableTestVertex>(vertex3, vertex3); var edge41 = new Edge <CloneableTestVertex>(vertex4, vertex1); graph.AddTransitionFactory( new TestTransitionFactory <CloneableTestVertex>(new[] { new TestTransitionFactory <CloneableTestVertex> .VertexEdgesSet(vertex1, new[] { edge11, edge12 }), new TestTransitionFactory <CloneableTestVertex> .VertexEdgesSet(vertex2, new[] { edge24 }), new TestTransitionFactory <CloneableTestVertex> .VertexEdgesSet(vertex3, new[] { edge33 }), })); graph.AddTransitionFactory( new TestTransitionFactory <CloneableTestVertex>(vertex1, new[] { edge13 })); graph.AddTransitionFactory( new TestTransitionFactory <CloneableTestVertex>(vertex4, new[] { edge41 })); Assert.AreSame(edge11, graph.OutEdge(vertex1, 0)); Assert.AreSame(edge13, graph.OutEdge(vertex1, 2)); Assert.AreSame(edge24, graph.OutEdge(vertex2, 0)); Assert.AreSame(edge33, graph.OutEdge(vertex3, 0)); Assert.AreSame(edge41, graph.OutEdge(vertex4, 0)); Assert.AreSame(edge41, graph.OutEdge(vertex4, 0)); }