//************************************************************************* // Constructor: DuplicateEdgeDetectorTest() // /// <summary> /// Initializes a new instance of the <see /// cref="DuplicateEdgeDetectorTest" /> class. /// </summary> //************************************************************************* public DuplicateEdgeDetectorTest() { m_oDuplicateEdgeDetector = null; m_oDirectedGraph = null; m_oDirectedVertexA = null; m_oDirectedVertexB = null; m_oDirectedVertexC = null; m_oDirectedVertexD = null; m_oDirectedVertexWithNullName = null; m_oUndirectedGraph = null; m_oUndirectedVertexA = null; m_oUndirectedVertexB = null; m_oUndirectedVertexC = null; m_oUndirectedVertexD = null; m_oUndirectedVertexWithNullName = null; }
//************************************************************************* // Method: TryCalculateGraphMetrics() // /// <summary> /// Attempts to calculate the graph metrics while optionally running on a /// background thread. /// </summary> /// /// <param name="graph"> /// The graph to calculate metrics for. The graph may contain duplicate /// edges and self-loops. /// </param> /// /// <param name="backgroundWorker"> /// The BackgroundWorker whose thread is calling this method, or null if /// the method is being called by some other thread. /// </param> /// /// <param name="graphMetrics"> /// Where the graph metrics get stored if true is returned. /// </param> /// /// <returns> /// true if the graph metrics were calculated, false if the user wants to /// cancel. /// </returns> //************************************************************************* public Boolean TryCalculateGraphMetrics( IGraph graph, BackgroundWorker backgroundWorker, out OverallMetrics graphMetrics ) { Debug.Assert(graph != null); AssertValid(); graphMetrics = null; if (backgroundWorker != null) { if (backgroundWorker.CancellationPending) { return (false); } ReportProgress(1, 3, backgroundWorker); } DuplicateEdgeDetector oDuplicateEdgeDetector = new DuplicateEdgeDetector(graph); Int32 iVertices = graph.Vertices.Count; Int32 iEdges = graph.Edges.Count; Int32 iSelfLoops = CountSelfLoops(graph); Int32 iConnectedComponents, iSingleVertexConnectedComponents, iMaximumConnectedComponentVertices, iMaximumConnectedComponentEdges; CalculateConnectedComponentMetrics(graph, out iConnectedComponents, out iSingleVertexConnectedComponents, out iMaximumConnectedComponentVertices, out iMaximumConnectedComponentEdges); Nullable<Int32> iMaximumGeodesicDistance; Nullable<Double> dAverageGeodesicDistance; if (backgroundWorker != null) { ReportProgress(2, 3, backgroundWorker); } CalculateGeodesicDistances(graph, out iMaximumGeodesicDistance, out dAverageGeodesicDistance); OverallMetrics oOverallMetrics = new OverallMetrics( graph.Directedness, oDuplicateEdgeDetector.UniqueEdges, oDuplicateEdgeDetector.EdgesWithDuplicates, iSelfLoops, iVertices, CalculateGraphDensity(graph, iVertices, oDuplicateEdgeDetector. TotalEdgesAfterMergingDuplicatesNoSelfLoops), iConnectedComponents, iSingleVertexConnectedComponents, iMaximumConnectedComponentVertices, iMaximumConnectedComponentEdges, iMaximumGeodesicDistance, dAverageGeodesicDistance ); graphMetrics = oOverallMetrics; return (true); }
public void TestGraphContainsDuplicateEdges9() { // Undirected graph, duplicate A,B. m_oDuplicateEdgeDetector = new DuplicateEdgeDetector(m_oUndirectedGraph); IEdgeCollection oEdges = m_oUndirectedGraph.Edges; oEdges.Add(m_oUndirectedVertexA, m_oUndirectedVertexB, false); oEdges.Add(m_oUndirectedVertexA, m_oUndirectedVertexA, false); oEdges.Add(m_oUndirectedVertexB, m_oUndirectedVertexB, false); oEdges.Add(m_oUndirectedVertexC, m_oUndirectedVertexD, false); oEdges.Add(m_oUndirectedVertexC, m_oUndirectedVertexWithNullName, false); oEdges.Add(m_oUndirectedVertexA, m_oUndirectedVertexB, false); Assert.IsTrue(m_oDuplicateEdgeDetector.GraphContainsDuplicateEdges); Assert.AreEqual(3, m_oDuplicateEdgeDetector.UniqueEdges); Assert.AreEqual(2, m_oDuplicateEdgeDetector.EdgesWithDuplicates); Assert.AreEqual(2, m_oDuplicateEdgeDetector. TotalEdgesAfterMergingDuplicatesNoSelfLoops); }
public void TestGraphContainsDuplicateEdges7() { // Directed graph, many duplicates. m_oDuplicateEdgeDetector = new DuplicateEdgeDetector(m_oDirectedGraph); IEdgeCollection oEdges = m_oDirectedGraph.Edges; oEdges.Add(m_oDirectedVertexA, m_oDirectedVertexB, true); oEdges.Add(m_oDirectedVertexA, m_oDirectedVertexA, true); oEdges.Add(m_oDirectedVertexA, m_oDirectedVertexA, true); oEdges.Add(m_oDirectedVertexA, m_oDirectedVertexB, true); oEdges.Add(m_oDirectedVertexB, m_oDirectedVertexA, true); oEdges.Add(m_oDirectedVertexB, m_oDirectedVertexB, true); oEdges.Add(m_oDirectedVertexB, m_oDirectedVertexA, true); oEdges.Add(m_oDirectedVertexB, m_oDirectedVertexA, true); oEdges.Add(m_oDirectedVertexB, m_oDirectedVertexB, true); oEdges.Add(m_oDirectedVertexA, m_oDirectedVertexA, true); oEdges.Add(m_oDirectedVertexC, m_oDirectedVertexD, true); oEdges.Add(m_oDirectedVertexB, m_oDirectedVertexA, true); oEdges.Add(m_oDirectedVertexA, m_oDirectedVertexB, true); Assert.IsTrue(m_oDuplicateEdgeDetector.GraphContainsDuplicateEdges); Assert.AreEqual(1, m_oDuplicateEdgeDetector.UniqueEdges); Assert.AreEqual(12, m_oDuplicateEdgeDetector.EdgesWithDuplicates); Assert.AreEqual(3, m_oDuplicateEdgeDetector. TotalEdgesAfterMergingDuplicatesNoSelfLoops); }
public void TestGraphContainsDuplicateEdges6() { // Directed graph, non-duplicate null name, C. m_oDuplicateEdgeDetector = new DuplicateEdgeDetector(m_oDirectedGraph); IEdgeCollection oEdges = m_oDirectedGraph.Edges; oEdges.Add(m_oDirectedVertexA, m_oDirectedVertexB, true); oEdges.Add(m_oDirectedVertexB, m_oDirectedVertexA, true); oEdges.Add(m_oDirectedVertexA, m_oDirectedVertexA, true); oEdges.Add(m_oDirectedVertexB, m_oDirectedVertexB, true); oEdges.Add(m_oDirectedVertexC, m_oDirectedVertexD, true); oEdges.Add(m_oDirectedVertexC, m_oDirectedVertexWithNullName, true); oEdges.Add(m_oDirectedVertexWithNullName, m_oDirectedVertexC, true); Assert.IsFalse(m_oDuplicateEdgeDetector.GraphContainsDuplicateEdges); Assert.AreEqual(5, m_oDuplicateEdgeDetector.UniqueEdges); Assert.AreEqual(0, m_oDuplicateEdgeDetector.EdgesWithDuplicates); Assert.AreEqual(3, m_oDuplicateEdgeDetector. TotalEdgesAfterMergingDuplicatesNoSelfLoops); }
public void TearDown() { m_oDuplicateEdgeDetector = null; m_oDirectedGraph = null; m_oDirectedVertexA = null; m_oDirectedVertexB = null; m_oDirectedVertexC = null; m_oDirectedVertexD = null; m_oDirectedVertexWithNullName = null; m_oUndirectedGraph = null; m_oUndirectedVertexA = null; m_oUndirectedVertexB = null; m_oUndirectedVertexC = null; m_oUndirectedVertexD = null; m_oUndirectedVertexWithNullName = null; }
TryCalculateGraphMetrics ( IGraph graph, BackgroundWorker backgroundWorker, out OverallMetrics graphMetrics ) { Debug.Assert(graph != null); AssertValid(); graphMetrics = null; if (backgroundWorker != null) { if (backgroundWorker.CancellationPending) { return(false); } ReportProgress(1, 3, backgroundWorker); } DuplicateEdgeDetector oDuplicateEdgeDetector = new DuplicateEdgeDetector(graph); Int32 iVertices = graph.Vertices.Count; Int32 iEdges = graph.Edges.Count; Int32 iSelfLoops = CountSelfLoops(graph); Int32 iConnectedComponents, iSingleVertexConnectedComponents, iMaximumConnectedComponentVertices, iMaximumConnectedComponentEdges; CalculateConnectedComponentMetrics(graph, out iConnectedComponents, out iSingleVertexConnectedComponents, out iMaximumConnectedComponentVertices, out iMaximumConnectedComponentEdges); Nullable <Int32> iMaximumGeodesicDistance; Nullable <Double> dAverageGeodesicDistance; if (backgroundWorker != null) { ReportProgress(2, 3, backgroundWorker); } CalculateGeodesicDistances(graph, out iMaximumGeodesicDistance, out dAverageGeodesicDistance); OverallMetrics oOverallMetrics = new OverallMetrics( graph.Directedness, oDuplicateEdgeDetector.UniqueEdges, oDuplicateEdgeDetector.EdgesWithDuplicates, iSelfLoops, iVertices, CalculateGraphDensity(graph, iVertices, oDuplicateEdgeDetector. TotalEdgesAfterMergingDuplicatesNoSelfLoops), iConnectedComponents, iSingleVertexConnectedComponents, iMaximumConnectedComponentVertices, iMaximumConnectedComponentEdges, iMaximumGeodesicDistance, dAverageGeodesicDistance ); graphMetrics = oOverallMetrics; return(true); }