public void RandomTransitiveClosureAndCompositionTest() { for (int i = 0; i < RandomTests; i++) { DirectedGraph <int, DirectedEdge <int> > graph = GenerateRandomIntegerDirectedGraph(MaxDirectedGraphSize); DirectedGraph <int, DirectedEdge <int> > composed = DirectedGraph <int, DirectedEdge <int> > .Compose(graph, graph, (a, b) => new DirectedEdge <int>(a, b)); DirectedGraph <int, DirectedEdge <int> > closure = graph.TransitiveClosure(); foreach (Edge <int> edge in composed.Edges) { Assert.IsTrue(closure.ContainsEdge(edge.StartVertex, edge.EndVertex), "Failure on run " + i.ToString() + " based on seed " + _seed.ToString() + "."); } } }