public void GenerateConnectivityMatrixTest() { ConnectivityGraph cGraph = new ConnectivityGraph(); for (int i = 0; i < 5; i++) { cGraph.AddVertex(); } cGraph.AddEdge(0, 2); cGraph.AddEdge(0, 1); cGraph.AddEdge(2, 1); cGraph.AddEdge(1, 3); cGraph.AddEdge(3, 4); var connectivity = cGraph.GenerateConnectivityMatrix(); bool row1 = connectivity[0][0] == false && connectivity[0][1] == true && connectivity[0][2] == true && connectivity[0][3] == true && connectivity[0][4] == true; bool row2 = connectivity[1][0] == false && connectivity[1][1] == false && connectivity[1][2] == false && connectivity[1][3] == true && connectivity[1][4] == true; bool row3 = connectivity[2][0] == false && connectivity[2][1] == true && connectivity[2][2] == false && connectivity[2][3] == true && connectivity[2][4] == true; bool row4 = connectivity[3][0] == false && connectivity[3][1] == false && connectivity[3][2] == false && connectivity[3][3] == false && connectivity[3][4] == true; bool row5 = connectivity[4][0] == false && connectivity[4][1] == false && connectivity[4][2] == false && connectivity[4][3] == false && connectivity[4][4] == false; Assert.IsTrue(row1 && row2 && row3 && row4 && row5); }
// Compares the edges topological order private void TopologyCompare(IEnumerable<IStaticGraph> staticGraphs, IEnumerable<IDynamicGraph> dynamicGraphs) { Console.WriteLine("Starting topology comparer"); // Find connected pairs to compare var connectivity = new ConnectivityGraph(); for (var i = 0; i < _n; i++) { connectivity.AddVertex(); } foreach (var edge in _edges) { connectivity.AddEdge(edge.Item1, edge.Item2); } // matrix of node connectivity Console.WriteLine("Generating connectivity matrix"); var matrix = connectivity.GenerateConnectivityMatrix(); var topologies = new List<Tuple<string, SGTree<int>, List<SGTNode<int>>>>(); Console.WriteLine("Connectivity matrix completed"); foreach (var algorithm in staticGraphs) { var sgt = new SGTree<int>(0.75); var top = algorithm.TopoSort(); var items = new List<SGTNode<int>>(); var prev = sgt.insertFirst(top[0]); items.Add(prev); for (var i = 1; i < top.Length; i++) { prev = sgt.insertAfter(prev, top[i]); items.Add(prev); } items.Sort(Comparer<SGTNode<int>>.Create((i, j) => i.Value.CompareTo(j.Value))); topologies.Add(new Tuple<string, SGTree<int>, List<SGTNode<int>>> (algorithm.GetType().ToString(), sgt, items)); } foreach (var algorithm in dynamicGraphs) { var sgt = new SGTree<int>(0.75); var top = algorithm.Topology(); var items = new List<SGTNode<int>>(); var prev = sgt.insertFirst(top[0]); items.Add(prev); for (var i = 1; i < top.Count; i++) { prev = sgt.insertAfter(prev, top[i]); items.Add(prev); } items.Sort(Comparer<SGTNode<int>>.Create((i, j) => i.Value.CompareTo(j.Value))); topologies.Add(new Tuple<string, SGTree<int>, List<SGTNode<int>>>(algorithm.GetType().ToString(), sgt, items)); } Console.Write("Performing topology compare"); for (var i = 0; i < matrix.Count; i++) { for (var j = 0; j < matrix.Count; j++) { if (matrix[i][j]) { foreach (var algorithm in topologies) { //if(!algorithm.Item2.query(algorithm.Item3[i], algorithm.Item3[j])) if (!algorithm.Item2.Query(algorithm.Item3[j], algorithm.Item3[i])) { WriteFile("TopoCompFail"); throw new Exception("Topological comparison failed for: " + algorithm.Item1); } } } } } }