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);
        }
        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);
                            }
                        }
                    }
                }
            }
        }