コード例 #1
0
        public void Degree_Throws()
        {
            var wrappedGraph = new BidirectionalGraph <EquatableTestVertex, Edge <EquatableTestVertex> >();
            var graph        = new ReversedBidirectionalGraph <EquatableTestVertex, Edge <EquatableTestVertex> >(wrappedGraph);

            Degree_Throws_Test(graph);
        }
コード例 #2
0
        public void TryGetInEdges_Throws()
        {
            var wrappedGraph = new BidirectionalGraph <TestVertex, Edge <TestVertex> >();
            var graph        = new ReversedBidirectionalGraph <TestVertex, Edge <TestVertex> >(wrappedGraph);

            TryGetInEdges_Throws_Test(graph);
        }
        private void ComputeMinimumTree(
            TVertex goal,
            out IDictionary <TVertex, TEdge> successors,
            out IDictionary <TVertex, double> distances)
        {
            var reversedGraph =
                new ReversedBidirectionalGraph <TVertex, TEdge>(this.VisitedGraph);
            var successorsObserver =
                new VertexPredecessorRecorderObserver <TVertex, SReversedEdge <TVertex, TEdge> >();
            Func <SReversedEdge <TVertex, TEdge>, double> reversedEdgeWeight =
                e => this.edgeWeights(e.OriginalEdge);
            var distancesObserser =
                new VertexDistanceRecorderObserver <TVertex, SReversedEdge <TVertex, TEdge> >(reversedEdgeWeight);
            var shortestpath =
                new DijkstraShortestPathAlgorithm <TVertex, SReversedEdge <TVertex, TEdge> >(
                    this, reversedGraph, reversedEdgeWeight, this.DistanceRelaxer);

            using (successorsObserver.Attach(shortestpath))
                using (distancesObserser.Attach(shortestpath))
                    shortestpath.Compute(goal);

            successors = new Dictionary <TVertex, TEdge>();
            foreach (var kv in successorsObserver.VertexPredecessors)
            {
                successors.Add(kv.Key, kv.Value.OriginalEdge);
            }
            distances = distancesObserser.Distances;
        }
コード例 #4
0
        public void Construction()
        {
            var wrappedGraph = new BidirectionalGraph <int, Edge <int> >();
            var graph        = new ReversedBidirectionalGraph <int, Edge <int> >(wrappedGraph);

            AssertGraphProperties(graph);

            wrappedGraph = new BidirectionalGraph <int, Edge <int> >(true);
            graph        = new ReversedBidirectionalGraph <int, Edge <int> >(wrappedGraph);
            AssertGraphProperties(graph);

            wrappedGraph = new BidirectionalGraph <int, Edge <int> >(false);
            graph        = new ReversedBidirectionalGraph <int, Edge <int> >(wrappedGraph);
            AssertGraphProperties(graph, false);

            #region Local function

            void AssertGraphProperties <TVertex, TEdge>(
                ReversedBidirectionalGraph <TVertex, TEdge> g,
                bool parallelEdges = true)
                where TEdge : IEdge <TVertex>
            {
                Assert.IsTrue(g.IsDirected);
                Assert.AreEqual(parallelEdges, g.AllowParallelEdges);
                Assert.IsNotNull(g.OriginalGraph);
                AssertEmptyGraph(g);
            }

            #endregion
        }
コード例 #5
0
        public void BinarySerialization_BidirectionalGraph([NotNull] BidirectionalGraph <int, EquatableEdge <int> > graph)
        {
            BidirectionalGraph <int, EquatableEdge <int> > deserializedGraph =
                SerializeDeserialize <int, EquatableEdge <int>, BidirectionalGraph <int, EquatableEdge <int> > >(graph);

            Assert.IsTrue(EquateGraphs.Equate(graph, deserializedGraph));

            var arrayGraph = new ArrayBidirectionalGraph <int, EquatableEdge <int> >(graph);
            ArrayBidirectionalGraph <int, EquatableEdge <int> > deserializedGraph2 =
                SerializeDeserialize <int, EquatableEdge <int>, ArrayBidirectionalGraph <int, EquatableEdge <int> > >(arrayGraph);

            Assert.IsTrue(EquateGraphs.Equate(arrayGraph, deserializedGraph2));

            var reversedGraph = new ReversedBidirectionalGraph <int, EquatableEdge <int> >(graph);
            ReversedBidirectionalGraph <int, EquatableEdge <int> > deserializedGraph3 =
                SerializeDeserialize <int, SReversedEdge <int, EquatableEdge <int> >, ReversedBidirectionalGraph <int, EquatableEdge <int> > >(reversedGraph);

            Assert.IsTrue(EquateGraphs.Equate(reversedGraph, deserializedGraph3));

            var undirectedBidirectionalGraph = new UndirectedBidirectionalGraph <int, EquatableEdge <int> >(graph);
            UndirectedBidirectionalGraph <int, EquatableEdge <int> > deserializedGraph4 =
                SerializeDeserialize <int, EquatableEdge <int>, UndirectedBidirectionalGraph <int, EquatableEdge <int> > >(undirectedBidirectionalGraph);

            Assert.IsTrue(EquateGraphs.Equate(undirectedBidirectionalGraph, deserializedGraph4));
        }
コード例 #6
0
        public void ContainsVertex_Throws()
        {
            var wrappedGraph = new BidirectionalGraph <TestVertex, Edge <TestVertex> >();
            var graph        = new ReversedBidirectionalGraph <TestVertex, Edge <TestVertex> >(wrappedGraph);

            ContainsVertex_Throws_Test(graph);
        }
コード例 #7
0
        public void BinarySerialization_BidirectionalGraph_Complex([NotNull] BidirectionalGraph <EquatableTestVertex, EquatableTestEdge> graph)
        {
            BidirectionalGraph <EquatableTestVertex, EquatableTestEdge> deserializedGraph =
                SerializeDeserialize <EquatableTestVertex, EquatableTestEdge, BidirectionalGraph <EquatableTestVertex, EquatableTestEdge> >(graph);

            Assert.IsTrue(EquateGraphs.Equate(graph, deserializedGraph));

            var arrayGraph = new ArrayBidirectionalGraph <EquatableTestVertex, EquatableTestEdge>(graph);
            ArrayBidirectionalGraph <EquatableTestVertex, EquatableTestEdge> deserializedGraph2 =
                SerializeDeserialize <EquatableTestVertex, EquatableTestEdge, ArrayBidirectionalGraph <EquatableTestVertex, EquatableTestEdge> >(arrayGraph);

            Assert.IsTrue(EquateGraphs.Equate(arrayGraph, deserializedGraph2));

            var reversedGraph = new ReversedBidirectionalGraph <EquatableTestVertex, EquatableTestEdge>(graph);
            ReversedBidirectionalGraph <EquatableTestVertex, EquatableTestEdge> deserializedGraph3 =
                SerializeDeserialize <EquatableTestVertex, SReversedEdge <EquatableTestVertex, EquatableTestEdge>, ReversedBidirectionalGraph <EquatableTestVertex, EquatableTestEdge> >(reversedGraph);

            Assert.IsTrue(EquateGraphs.Equate(reversedGraph, deserializedGraph3));

            var undirectedBidirectionalGraph = new UndirectedBidirectionalGraph <EquatableTestVertex, EquatableTestEdge>(graph);
            UndirectedBidirectionalGraph <EquatableTestVertex, EquatableTestEdge> deserializedGraph4 =
                SerializeDeserialize <EquatableTestVertex, EquatableTestEdge, UndirectedBidirectionalGraph <EquatableTestVertex, EquatableTestEdge> >(undirectedBidirectionalGraph);

            Assert.IsTrue(EquateGraphs.Equate(undirectedBidirectionalGraph, deserializedGraph4));
        }
コード例 #8
0
        public void GraphMLSerialization_BidirectionalGraph([NotNull] BidirectionalGraph <int, EquatableEdge <int> > graph)
        {
            AdjacencyGraph <int, EquatableEdge <int> > deserializedGraph =
                SerializeDeserialize <BidirectionalGraph <int, EquatableEdge <int> >, AdjacencyGraph <int, EquatableEdge <int> > >(graph);

            Assert.IsTrue(EquateGraphs.Equate(graph, deserializedGraph));

            var arrayGraph = new ArrayBidirectionalGraph <int, EquatableEdge <int> >(graph);
            AdjacencyGraph <int, EquatableEdge <int> > deserializedGraph2 =
                SerializeDeserialize <ArrayBidirectionalGraph <int, EquatableEdge <int> >, AdjacencyGraph <int, EquatableEdge <int> > >(arrayGraph);

            Assert.IsTrue(EquateGraphs.Equate(arrayGraph, deserializedGraph2));

            var reversedGraph = new ReversedBidirectionalGraph <int, EquatableEdge <int> >(graph);
            BidirectionalGraph <int, EquatableEdge <int> > deserializedGraph3 =
                SerializeDeserialize_Reversed <ReversedBidirectionalGraph <int, EquatableEdge <int> >, BidirectionalGraph <int, EquatableEdge <int> > >(reversedGraph);

            Assert.IsTrue(
                EquateGraphs.Equate(
                    graph,
                    deserializedGraph3,
                    EqualityComparer <int> .Default,
                    LambdaEqualityComparer <EquatableEdge <int> > .Create(
                        (edge1, edge2) => Equals(edge1.Source, edge2.Target) && Equals(edge1.Target, edge2.Source),
                        edge => edge.GetHashCode())));

            var undirectedBidirectionalGraph = new UndirectedBidirectionalGraph <int, EquatableEdge <int> >(graph);
            UndirectedGraph <int, EquatableEdge <int> > deserializedGraph4 =
                SerializeDeserialize <UndirectedBidirectionalGraph <int, EquatableEdge <int> >, UndirectedGraph <int, EquatableEdge <int> > >(undirectedBidirectionalGraph);

            Assert.IsTrue(EquateGraphs.Equate(undirectedBidirectionalGraph, deserializedGraph4));
        }
コード例 #9
0
		public void Test(IVertexAndEdgeListGraph g, IVertex root)
		{
			this.root = root; 

			RandomWalkAlgorithm walker = new RandomWalkAlgorithm(g);
			walker.TreeEdge +=new EdgeEventHandler(walker_TreeEdge);
			walker.Generate(root,50);

			BidirectionalAdaptorGraph bg = new BidirectionalAdaptorGraph(g);
			ReversedBidirectionalGraph rg = new ReversedBidirectionalGraph(bg);
			CyclePoppingRandomTreeAlgorithm pop = new CyclePoppingRandomTreeAlgorithm(rg);

			pop.InitializeVertex +=new VertexEventHandler(this.InitializeVertex);
			pop.FinishVertex +=new VertexEventHandler(this.FinishVertex);
			pop.TreeEdge += new EdgeEventHandler(this.TreeEdge);

			pop.InitializeVertex +=new VertexEventHandler(vis.InitializeVertex);
			pop.TreeEdge += new EdgeEventHandler(vis.TreeEdge);
			pop.ClearTreeVertex += new VertexEventHandler(vis.ClearTreeVertex);

			pop.RandomTreeWithRoot(root);

			// plot tree...
			GraphvizAlgorithm gv = new GraphvizAlgorithm(g,".",GraphvizImageType.Svg);
			gv.FormatEdge +=new FormatEdgeEventHandler(this.FormatEdge);
			gv.FormatVertex +=new FormatVertexEventHandler(this.FormatVertex);

			gv.Write("randomtree");
		}
コード例 #10
0
        public void ContainsEdge_Throws()
        {
            var wrappedGraph = new BidirectionalGraph <TestVertex, Edge <TestVertex> >();
            var graph        = new ReversedBidirectionalGraph <TestVertex, Edge <TestVertex> >(wrappedGraph);

            ContainsEdge_NullThrows_ReversedTest(graph);
            ContainsEdge_SourceTarget_Throws_Test(graph);
        }
コード例 #11
0
        public void InEdges_Throws()
        {
            var wrappedGraph1 = new BidirectionalGraph <TestVertex, Edge <TestVertex> >();
            var graph1        = new ReversedBidirectionalGraph <TestVertex, Edge <TestVertex> >(wrappedGraph1);

            InEdges_NullThrows_Test(graph1);

            var wrappedGraph2 = new BidirectionalGraph <EquatableTestVertex, Edge <EquatableTestVertex> >();
            var graph2        = new ReversedBidirectionalGraph <EquatableTestVertex, Edge <EquatableTestVertex> >(wrappedGraph2);

            InEdges_Throws_Test(graph2);
        }
コード例 #12
0
ファイル: Heapshot.cs プロジェクト: noah1510/dotdevelop
        public Heapshot(NativeHeapshot nativeHeapshot)
        {
            //Objects = nativeHeapshot.Objects;
            Roots        = nativeHeapshot.Roots;
            TrackedTypes = nativeHeapshot.TrackedTypes;
            Types        = nativeHeapshot.Types;

            var graphWithInReferences = new BidirectionAdapterGraph <HeapObject, Edge <HeapObject> > (nativeHeapshot.Graph);

            // Construct the in-edge graph, so we can trace an object's retention path.
            Graph = new ReversedBidirectionalGraph <HeapObject, Edge <HeapObject> > (graphWithInReferences);
        }
コード例 #13
0
        public void AddEdge()
        {
            var wrappedGraph = new BidirectionalGraph <int, Edge <int> >();
            var graph        = new ReversedBidirectionalGraph <int, Edge <int> >(wrappedGraph);

            var edge = new Edge <int>(1, 2);

            wrappedGraph.AddVertex(1);
            wrappedGraph.AddVertex(2);
            wrappedGraph.AddEdge(edge);

            AssertHasEdges(graph, new[] { edge });  // Graph is updated
        }
コード例 #14
0
        public void InEdge_Throws()
        {
            var wrappedGraph1 = new BidirectionalGraph <int, Edge <int> >();

            InEdge_Throws_ImmutableGraph_ReversedTest(
                wrappedGraph1,
                () => new ReversedBidirectionalGraph <int, Edge <int> >(wrappedGraph1));

            var wrappedGraph2 = new BidirectionalGraph <TestVertex, Edge <TestVertex> >();
            var graph2        = new ReversedBidirectionalGraph <TestVertex, Edge <TestVertex> >(wrappedGraph2);

            InEdge_NullThrows_Test(graph2);
        }
コード例 #15
0
ファイル: Heap.cs プロジェクト: Therzok/LeakTest.NET
        internal Heap(
            Dictionary <long, HeapRoot> roots,
            Dictionary <string, long> trackedTypes,
            Dictionary <long, HeapTypeInformation> types,
            IVertexAndEdgeListGraph <HeapObject, Edge <HeapObject> > referenceGraph)
        {
            //Objects = nativeHeapshot.Objects;
            Roots        = roots;
            TrackedTypes = trackedTypes;
            Types        = types;

            var graphWithInReferences = new BidirectionAdapterGraph <HeapObject, Edge <HeapObject> >(referenceGraph);

            // Construct the in-edge graph, so we can trace an object's retention path.
            Graph = new ReversedBidirectionalGraph <HeapObject, Edge <HeapObject> >(graphWithInReferences);
        }
コード例 #16
0
        private void ComputeMinimumTree(
            [NotNull] TVertex target,
            out IDictionary <TVertex, TEdge> successors,
            out IDictionary <TVertex, double> distances)
        {
            Debug.Assert(target != null);

            var reversedGraph =
                new ReversedBidirectionalGraph <TVertex, TEdge>(VisitedGraph);
            var successorsObserver =
                new VertexPredecessorRecorderObserver <TVertex, SReversedEdge <TVertex, TEdge> >();
            var distancesObserver =
                new VertexDistanceRecorderObserver <TVertex, SReversedEdge <TVertex, TEdge> >(ReversedEdgeWeight);
            var shortestPath =
                new DijkstraShortestPathAlgorithm <TVertex, SReversedEdge <TVertex, TEdge> >(
                    this,
                    reversedGraph,
                    ReversedEdgeWeight,
                    DistanceRelaxer);

            using (successorsObserver.Attach(shortestPath))
                using (distancesObserver.Attach(shortestPath))
                    shortestPath.Compute(target);

            successors = new Dictionary <TVertex, TEdge>();
            foreach (KeyValuePair <TVertex, SReversedEdge <TVertex, TEdge> > pair in successorsObserver.VerticesPredecessors)
            {
                successors.Add(pair.Key, pair.Value.OriginalEdge);
            }

            distances = distancesObserver.Distances;

            #region Local function

            double ReversedEdgeWeight(SReversedEdge <TVertex, TEdge> edge)
            {
                return(_edgeWeights(edge.OriginalEdge));
            }

            #endregion
        }
コード例 #17
0
ファイル: GcTypeHeap.cs プロジェクト: barsgroup/QuickGraph
        private GcTypeHeap TouchingInPlace(string typeNames)
        {
            if (String.IsNullOrEmpty(typeNames))
            {
                throw new ArgumentNullException("typeNames");
            }

            var filter = FilterHelper.ToFilter(typeNames);

            Console.WriteLine("filtering nodes not connected to type matching '{0}'", filter);
            var colors = new Dictionary <GcType, GraphColor>(this.graph.VertexCount);

            foreach (var type in this.graph.Vertices)
            {
                colors.Add(type, GraphColor.White);
            }

            var rgraph = new ReversedBidirectionalGraph <GcType, GcTypeEdge>(graph);

            foreach (var type in this.graph.Vertices)
            {
                if (filter.Match(type.Name))
                {
                    { // parents
                        var dfs =
                            new DepthFirstSearchAlgorithm <GcType, ReversedEdge <GcType, GcTypeEdge> >(rgraph, colors);
                        dfs.Visit(type);
                    }
                    { // children
                        var dfs = new DepthFirstSearchAlgorithm <GcType, GcTypeEdge>(graph, colors);
                        dfs.Visit(type);
                    }
                }
            }
            // remove all white vertices
            this.graph.RemoveVertexIf(t => colors[t] == GraphColor.White);
            Console.WriteLine("resulting {0} types, {1} edges", graph.VertexCount, graph.EdgeCount);
            return(this);
        }
コード例 #18
0
ファイル: GcTypeHeap.cs プロジェクト: buptkang/QuickGraph
        private GcTypeHeap TouchingInPlace(string typeNames)
        {
            if (String.IsNullOrEmpty(typeNames))
                throw new ArgumentNullException("typeNames");

            var filter = FilterHelper.ToFilter(typeNames);
            Console.WriteLine("filtering nodes not connected to type matching '{0}'", filter);
            var colors = new Dictionary<GcType, GraphColor>(this.graph.VertexCount);
            foreach (var type in this.graph.Vertices)
                colors.Add(type, GraphColor.White);

            var rgraph = new ReversedBidirectionalGraph<GcType, GcTypeEdge>(graph);
            foreach (var type in this.graph.Vertices)
            {
                if (filter.Match(type.Name))
                {
                    { // parents
                        var dfs =
                            new DepthFirstSearchAlgorithm<GcType, ReversedEdge<GcType, GcTypeEdge>>(rgraph, colors);
                        dfs.Visit(type, -1);
                    }
                    { // children
                        var dfs = new DepthFirstSearchAlgorithm<GcType, GcTypeEdge>(graph, colors);
                        dfs.Visit(type, -1);
                    }
                }
            }
            // remove all white vertices
            this.graph.RemoveVertexIf(t => colors[t] == GraphColor.White);
            Console.WriteLine("resulting {0} types, {1} edges", graph.VertexCount, graph.EdgeCount);
            return this;
        }