コード例 #1
0
		public void RemoveEdgeIf(IMutableEdgeListGraph g)
		{
			if (g.EdgesEmpty)
				return;

			IEdge e = RandomGraph.Edge(g,Rnd);

			g.RemoveEdgeIf(new DummyEdgeEqualPredicate(e,false));
			g.RemoveEdgeIf(new DummyEdgeEqualPredicate(e,true));
		}
コード例 #2
0
        bool IMutableEdgeListGraph <TVertex, TEdge> .RemoveEdge(TEdge e)
        {
            IMutableEdgeListGraph <TVertex, TEdge> ithis = this;

            //Contract.Requires(e != null);
            //Contract.Ensures(//Contract.Result<bool>() == //Contract.OldValue(ithis.ContainsEdge(e)));
            //Contract.Ensures(!ithis.ContainsEdge(e));
            //Contract.Ensures(ithis.EdgeCount == //Contract.OldValue(ithis.EdgeCount) - (//Contract.Result<bool>() ? 1 : 0));

            return(default(bool));
        }
コード例 #3
0
        int IMutableEdgeListGraph <TVertex, TEdge> .RemoveEdgeIf(EdgePredicate <TVertex, TEdge> predicate)
        {
            IMutableEdgeListGraph <TVertex, TEdge> ithis = this;

            Contract.Requires(predicate != null);
            Contract.Ensures(Contract.Result <int>() == Contract.OldValue(Enumerable.Count(ithis.Edges, e => predicate(e))));
            Contract.Ensures(Enumerable.All(ithis.Edges, e => !predicate(e)));
            Contract.Ensures(ithis.EdgeCount == Contract.OldValue(ithis.EdgeCount) - Contract.Result <int>());

            return(default(int));
        }
コード例 #4
0
        public void RemoveEdgeIf(IMutableEdgeListGraph g)
        {
            if (g.EdgesEmpty)
            {
                return;
            }

            IEdge e = RandomGraph.Edge(g, Rnd);

            g.RemoveEdgeIf(new DummyEdgeEqualPredicate(e, false));
            g.RemoveEdgeIf(new DummyEdgeEqualPredicate(e, true));
        }
コード例 #5
0
        bool IMutableEdgeListGraph <TVertex, TEdge> .AddEdge(TEdge e)
        {
            IMutableEdgeListGraph <TVertex, TEdge> ithis = this;

            Contract.Requires(e != null);
            Contract.Requires(ithis.ContainsVertex(e.Source));
            Contract.Requires(ithis.ContainsVertex(e.Target));
            Contract.Ensures(ithis.ContainsEdge(e));
            Contract.Ensures(ithis.AllowParallelEdges || Contract.Result <bool>() == Contract.OldValue(!ithis.ContainsEdge(e)));
            Contract.Ensures(ithis.EdgeCount == Contract.OldValue(ithis.EdgeCount) + (Contract.Result <bool>() ? 1 : 0));

            return(default(bool));
        }
コード例 #6
0
        protected static void ContainsEdge_EquatableEdges_ForbiddenParallelEdges_ImmutableVertices_Test(
            [NotNull] IMutableEdgeListGraph <int, EquatableEdge <int> > graph)
        {
            var edge1      = new EquatableEdge <int>(1, 2);
            var edge2      = new EquatableEdge <int>(1, 3);
            var edge3      = new EquatableEdge <int>(2, 1);
            var edge4      = new EquatableEdge <int>(2, 2);
            var otherEdge1 = new EquatableEdge <int>(1, 2);

            Assert.IsFalse(graph.ContainsEdge(edge1));
            Assert.IsFalse(graph.ContainsEdge(edge2));
            Assert.IsFalse(graph.ContainsEdge(edge3));
            Assert.IsFalse(graph.ContainsEdge(edge4));
            Assert.IsFalse(graph.ContainsEdge(otherEdge1));

            graph.AddEdge(edge1);
            Assert.IsTrue(graph.ContainsEdge(edge1));
            Assert.IsFalse(graph.ContainsEdge(edge2));
            Assert.IsFalse(graph.ContainsEdge(edge3));
            Assert.IsFalse(graph.ContainsEdge(edge4));
            Assert.IsTrue(graph.ContainsEdge(otherEdge1));

            graph.AddEdge(edge2);
            Assert.IsTrue(graph.ContainsEdge(edge1));
            Assert.IsTrue(graph.ContainsEdge(edge2));
            Assert.IsFalse(graph.ContainsEdge(edge3));
            Assert.IsFalse(graph.ContainsEdge(edge4));
            Assert.IsTrue(graph.ContainsEdge(otherEdge1));

            graph.AddEdge(edge3);
            Assert.IsTrue(graph.ContainsEdge(edge1));
            Assert.IsTrue(graph.ContainsEdge(edge2));
            Assert.IsTrue(graph.ContainsEdge(edge3));
            Assert.IsFalse(graph.ContainsEdge(edge4));
            Assert.IsTrue(graph.ContainsEdge(otherEdge1));

            graph.AddEdge(edge4);
            Assert.IsTrue(graph.ContainsEdge(edge1));
            Assert.IsTrue(graph.ContainsEdge(edge2));
            Assert.IsTrue(graph.ContainsEdge(edge3));
            Assert.IsTrue(graph.ContainsEdge(edge4));
            Assert.IsTrue(graph.ContainsEdge(otherEdge1));

            // Both vertices not in graph
            Assert.IsFalse(graph.ContainsEdge(new EquatableEdge <int>(10, 11)));
            // Source not in graph
            Assert.IsFalse(graph.ContainsEdge(new EquatableEdge <int>(10, 1)));
            // Target not in graph
            Assert.IsFalse(graph.ContainsEdge(new EquatableEdge <int>(1, 10)));
        }
コード例 #7
0
        int IMutableEdgeListGraph <TVertex, TEdge> .AddEdgeRange(IEnumerable <TEdge> edges)
        {
            IMutableEdgeListGraph <TVertex, TEdge> ithis = this;

            Contract.Requires(edges != null);
            Contract.Requires(typeof(TEdge).IsValueType || Enumerable.All(edges, edge => edge != null));
            Contract.Requires(Enumerable.All(edges, edge =>
                                             ithis.ContainsVertex(edge.Source) &&
                                             ithis.ContainsVertex(edge.Target)
                                             ));
            Contract.Ensures(Enumerable.All(edges, edge => ithis.ContainsEdge(edge)), "all edge from edges belong to the graph");
            Contract.Ensures(
                Contract.Result <int>() == Contract.OldValue(Enumerable.Count(edges, edge => !ithis.ContainsEdge(edge))));
            Contract.Ensures(ithis.EdgeCount == Contract.OldValue(ithis.EdgeCount) + Contract.Result <int>());

            return(default(int));
        }
コード例 #8
0
 void AddFallbackEdges(IMutableEdgeListGraph<AutoMixingBucket, AutoMixEdge> graph)
 {
     AddEdges(graph, strategiesFactory.GetNonPreferredCompatibleStrategies());
     Log.DebugFormat("Added {0} fallback edges (harmonic but not preferred).", graph.EdgeCount);
 }
コード例 #9
0
 void AddPreferredEdges(IMutableEdgeListGraph<AutoMixingBucket, AutoMixEdge> graph)
 {
     AddEdges(graph, strategiesFactory.GetPreferredStrategiesInOrder());
     Log.DebugFormat("Added {0} preferred edges.", graph.EdgeCount);
 }
コード例 #10
0
        /// <summary>
        /// Add any graph edge where there is any transition from one track to
        /// another, using one of the specified mixing strategies.
        /// </summary>
        void AddEdges(IMutableEdgeListGraph<AutoMixingBucket, AutoMixEdge> graph,
            IEnumerable<IMixingStrategy> strategies)
        {
            IEnumerable<AutoMixEdge> edges =
                from preceedingTrack in graph.Vertices
                from followingTrack in graph.Vertices
                where !followingTrack.Equals(preceedingTrack)
                from strategy in strategies
                where strategy.IsCompatible(preceedingTrack.ActualKey, followingTrack.ActualKey)
                orderby followingTrack.ActualKey, preceedingTrack.ActualKey
                let cost = edgeCostCalculator.CalculateCost(strategy)
                select new AutoMixEdge(preceedingTrack, followingTrack, strategy, cost);

            graph.AddEdgeRange(edges);
        }