Code Coverage: (bc: block coverage)
Factory Method:
[PexFactoryMethod(typeof(QuickGraph.UndirectedGraph<int, Edge<int>>))]public static UndirectedGraph<int, Edge<int>> CreateEmptyGraph(){ UndirectedGraph<int, Edge<int>> g = new UndirectedGraph<int, Edge<int>>(false); return g;}
[PexFactoryMethod(typeof(QuickGraph.UndirectedGraph<int, Edge<int>>))]public static UndirectedGraph<int, Edge<int>> CreateGraphOneNode(int node1){ UndirectedGraph<int, Edge<int>> g = new UndirectedGraph<int, Edge<int>>(false); g.AddVertex(node1); return g;}[PexFactoryMethod(typeof(QuickGraph.UndirectedGraph<int, Edge<int>>))]public static UndirectedGraph<int, Edge<int>> CreateGraphArrayOfNodesAndEdges([PexAssumeNotNull]int[] nodes, [PexAssumeNotNull] bool[] edges){ PexAssume.IsTrue(edges.Length <= nodes.Length); PexAssume.AreDistinctValues(nodes); PexAssume.TrueForAll(nodes, e => e != 0); UndirectedGraph<int, Edge<int>> g = new UndirectedGraph<int, Edge<int>>(false); foreach (int ele in nodes) { g.AddVertex(ele); } for (int i = 0; i < edges.Length; i++) { int source = PexChoose.IndexValue("indexed value", nodes); if (edges[i] == false) g.AddEdge(new Edge<int>(nodes[source], nodes[i])); } return g;}[PexFactoryMethod(typeof(QuickGraph.UndirectedGraph<int, Edge<int>>))]public static UndirectedGraph<int, Edge<int>> CreateGraphArrayOfNodesAndEdgesAssume([PexAssumeNotNull]int[] nodes, [PexAssumeNotNull] bool[] edges){ //PexAssume.IsTrue(nodes.Length <= 7 || nodes.Length > 7); PexAssume.IsTrue(edges.Length <= 6 || nodes.Length > 6); PexAssume.IsTrue(edges.Length <= nodes.Length); PexAssume.AreDistinctValues(nodes); //PexAssume.TrueForAll(nodes, e => e != 0); UndirectedGraph<int, Edge<int>> g = new UndirectedGraph<int, Edge<int>>(false); foreach (int ele in nodes) { g.AddVertex(ele); } int source = PexChoose.IndexValue("indexed value", nodes); for (int i = 0; i < edges.Length; i++) { if (edges[i] == false) g.AddEdge(new Edge<int>(nodes[source], nodes[i])); } return g;}
Equal Method:
public class UndirectedGraphEqualityComparer : EqualityComparer<UndirectedGraph<int, Edge<int>>>{ public override bool Equals(QuickGraph.UndirectedGraph<int, Edge<int>> g1, QuickGraph.UndirectedGraph<int, Edge<int>> g2) { if (g1 == null ) { return g2 == null; } else if (g2 == null) { return false; } else { if (g1.AllowParallelEdges != g2.AllowParallelEdges) { return false; } if (g1.VertexCount != g2.VertexCount) { return false; } if (g1.EdgeCount != g2.EdgeCount) { return false; } int[] vertices1 = g1.Vertices.ToArray(); for (int i = 0; i < vertices1.Length; i++) { if (!g2.ContainsVertex(vertices1[i])) { return false; } else { foreach (Edge<int> ve in g1.AdjacentEdges(vertices1[i])) { if (!g2.ContainsEdge(ve.Source, ve.Target)) { return false; } } } } return true; } } public override int GetHashCode(QuickGraph.UndirectedGraph<int, Edge<int>> g) { int hash = 0; if (g != null) { var edges = g.Edges; foreach (var e in edges) { if (e != null) { hash += e.Source * e.Target; } } } return hash; }}
Clone Method:
public UndirectedGraph<TVertex, TEdge> Clone(){ var g = new UndirectedGraph<TVertex, TEdge>(this.allowParallelEdges); var nodes = this.adjacentEdges.Keys; foreach (var n in nodes) { g.AddVertex(n); } var edgesList = this.adjacentEdges.Values; foreach (var edges in edgesList) foreach (var e in edges) g.AddEdge(e); return g;}