Ejemplo n.º 1
0
        protected static void AddEdgeRange_Throws_EdgesOnly_Test(
            IMutableEdgeListGraph <int, Edge <int> > graph)
        {
            int edgeAdded = 0;

            AssertNoEdge(graph);
            graph.EdgeAdded += e =>
            {
                Assert.IsNotNull(e);
                ++edgeAdded;
            };

            // ReSharper disable once AssignNullToNotNullAttribute
            Assert.Throws <ArgumentNullException>(() => graph.AddEdgeRange(null));
            AssertNoEdge(graph);
            Assert.AreEqual(0, edgeAdded);

            // Edge 1, 2, 3
            var edge1 = new Edge <int>(1, 2);
            var edge3 = new Edge <int>(2, 3);

            Assert.Throws <ArgumentNullException>(() => graph.AddEdgeRange(new[] { edge1, null, edge3 }));
            Assert.AreEqual(0, edgeAdded);
            AssertNoEdge(graph);
        }
Ejemplo n.º 2
0
        protected static void AddEdgeRange_EdgesOnly_Test(
            [NotNull] IMutableEdgeListGraph <int, Edge <int> > graph)
        {
            int edgeAdded = 0;

            AssertNoEdge(graph);
            // ReSharper disable once ParameterOnlyUsedForPreconditionCheck.Local
            graph.EdgeAdded += e =>
            {
                Assert.IsNotNull(e);
                ++edgeAdded;
            };

            // Edge 1, 2, 3
            var edge1 = new Edge <int>(1, 2);
            var edge2 = new Edge <int>(1, 3);
            var edge3 = new Edge <int>(2, 3);

            Assert.AreEqual(3, graph.AddEdgeRange(new[] { edge1, edge2, edge3 }));
            Assert.AreEqual(3, edgeAdded);
            AssertHasEdges(graph, new[] { edge1, edge2, edge3 });

            // Edge 1, 4
            var edge4 = new Edge <int>(2, 2);

            Assert.AreEqual(1, graph.AddEdgeRange(new[] { edge1, edge4 })); // Showcase the add of only one edge
            Assert.AreEqual(4, edgeAdded);
            AssertHasEdges(graph, new[] { edge1, edge2, edge3, edge4 });
        }
Ejemplo n.º 3
0
        protected static void AddEdgeRange_EdgesOnly_Test(
            IMutableEdgeListGraph <int, Edge <int> > graph)
        {
            int edgeAdded = 0;

            AssertNoEdge(graph);
            graph.EdgeAdded += e =>
            {
                Assert.IsNotNull(e);
                ++edgeAdded;
            };

            // Edge 1, 2, 3
            var edge1 = new Edge <int>(1, 2);
            var edge2 = new Edge <int>(1, 3);
            var edge3 = new Edge <int>(2, 3);

            Assert.AreEqual(3, graph.AddEdgeRange(new[] { edge1, edge2, edge3 }));
            Assert.AreEqual(3, edgeAdded);
            AssertHasEdges(graph, new[] { edge1, edge2, edge3 });

            // Edge 1, 4
            var edge4 = new Edge <int>(2, 2);

            Assert.AreEqual(1, graph.AddEdgeRange(new[] { edge1, edge4 })); // Showcase the add of only one edge
            Assert.AreEqual(4, edgeAdded);
            AssertHasEdges(graph, new[] { edge1, edge2, edge3, edge4 });
        }
Ejemplo n.º 4
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);
        }