public void TestVerifiedContraction5KeepPrevious()
        {
            var graph             = new DirectedGraph <CHEdgeData>();
            var witnessCalculator = new DykstraWitnessCalculator();
            var preProcessor      = new CHPreProcessor(graph,
                                                       new EdgeDifferenceContractedSearchSpace(graph, witnessCalculator), witnessCalculator);

            var vertex1 = graph.AddVertex(1, 0);
            var vertex2 = graph.AddVertex(2, 0);
            var vertex3 = graph.AddVertex(3, 0);
            var vertex4 = graph.AddVertex(4, 0);

            graph.AddEdge(vertex1, vertex3, new CHEdgeData(1, true, true, true, 10));
            graph.AddEdge(vertex3, vertex1, new CHEdgeData(1, false, true, true, 10));
            graph.AddEdge(vertex2, vertex3, new CHEdgeData(1, true, true, true, 10));
            graph.AddEdge(vertex3, vertex2, new CHEdgeData(1, false, true, true, 10));

            preProcessor.Contract(3);
            Assert.IsTrue(graph.ContainsEdge(vertex1, vertex2, new CHEdgeData(3, true, true, 20)));
            Assert.IsTrue(graph.ContainsEdge(vertex2, vertex1, new CHEdgeData(3, true, true, 20)));

            graph.AddEdge(vertex1, vertex4, new CHEdgeData(1, true, true, true, 15));
            graph.AddEdge(vertex4, vertex1, new CHEdgeData(1, false, true, true, 15));
            graph.AddEdge(vertex2, vertex4, new CHEdgeData(1, true, true, true, 15));
            graph.AddEdge(vertex4, vertex2, new CHEdgeData(1, false, true, true, 15));

            preProcessor.Contract(4);
            Assert.IsTrue(graph.ContainsEdge(vertex1, vertex2, new CHEdgeData(3, true, true, 20)));
            Assert.IsTrue(graph.ContainsEdge(vertex2, vertex1, new CHEdgeData(3, true, true, 20)));
        }
Example #2
0
        /// <summary>
        /// Code for when solve is clicked
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void uxSolve_Click(object sender, EventArgs e)
        {
            _graph = new DirectedGraph <Cell, int>();

            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 9; j++)
                {
                    for (int k = 0; k < 9; k++)
                    {
                        if (!_lookup[i, j].Equals(_lookup[i, k]) && !_graph.ContainsEdge(_lookup[i, j], _lookup[i, k]))
                        {
                            _graph.AddEdge(_lookup[i, j], _lookup[i, k], 0);
                            if (_lookup[i, k].Value != -1)
                            {
                                _lookup[i, j].RemoveMove(_lookup[i, k].Value);
                            }
                        }

                        if (!_lookup[i, j].Equals(_lookup[k, j]) && !_graph.ContainsEdge(_lookup[i, j], _lookup[k, j]))
                        {
                            _graph.AddEdge(_lookup[i, j], _lookup[k, j], 0);
                            if (_lookup[k, j].Value != -1)
                            {
                                _lookup[i, j].RemoveMove(_lookup[k, j].Value);
                            }
                        }

                        for (int l = 0; l < 9; l++)
                        {
                            if ((i / 3) == (k / 3) && (j / 3) == (l / 3))
                            {
                                if (!_lookup[i, j].Equals(_lookup[k, l]) && !_graph.ContainsEdge(_lookup[i, j], _lookup[k, l]))
                                {
                                    _graph.AddEdge(_lookup[i, j], _lookup[k, l], 0);
                                    if (_lookup[k, l].Value != -1)
                                    {
                                        _lookup[i, j].RemoveMove(_lookup[k, l].Value);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            if (!SolveSudoku(EmptyCell(), null))
            {
                MessageBox.Show("There is no solution to this puzzle");
            }

            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 9; j++)
                {
                    uxGrid.Rows[i].Cells[j].Value = _lookup[i, j].Value;
                }
            }
        }
Example #3
0
        public void TestContainsEdgeToNonExistingVertex()
        {
            const int Vertex1 = 0;
            const int Vertex2 = 1;

            var sut = new DirectedGraph <int>();

            Check.ThatCode(() => sut.ContainsEdge(Vertex1, Vertex2)).Throws <ArgumentException>();

            sut.AddVertex(Vertex1);

            Check.ThatCode(() => sut.ContainsEdge(Vertex1, Vertex2)).Throws <ArgumentException>();
            Check.ThatCode(() => sut.ContainsEdge(Vertex2, Vertex1)).Throws <ArgumentException>();
        }
        public void TestEdgeAdd()
        {
            var graph = new DirectedGraph <string>();

            var v1      = "One";
            var v2      = "Two";
            var actual1 = graph.ContainsEdge(v1, v2);

            Assert.AreEqual(false, actual1);

            graph.AddEdge(v1, v2);
            var actual2 = graph.ContainsEdge(v1, v2);

            Assert.AreEqual(true, actual2);
        }
Example #5
0
        public void TestDFindOneEdge()
        {
            DirectedGraph <int, string> g = new DirectedGraph <int, string>();

            g.AddEdge(1, 2, "three");
            Assert.That(g.ContainsEdge(1, 2), Is.True);
        }
Example #6
0
        public void TestAddContainsEdge()
        {
            const int Vertex1 = 0;
            const int Vertex2 = 1;

            var sut = new DirectedGraph <int>();

            sut.AddVertex(Vertex1);
            sut.AddVertex(Vertex2);

            Check.That(sut.ContainsEdge(Vertex1, Vertex2)).IsFalse();

            Check.That(sut.AddEdge(Vertex1, Vertex2)).IsTrue();

            Check.That(sut.ContainsEdge(Vertex1, Vertex2)).IsTrue();
        }
Example #7
0
        public void CommandifiedGraphAddRemoveVertexWithUndoTest()
        {
            Guid sessionId = Guid.NewGuid();

            CQManager.ActivateCommandQueueStack(sessionId);

            DirectedGraph <int, DirectedEdge <int> > graph = new DirectedGraph <int, DirectedEdge <int> >(true);

            graph.Add(42);
            Assert.IsTrue(graph.Contains(42));
            CQManager.UndoLastCommand();
            Assert.IsFalse(graph.Contains(42));
            Assert.AreEqual(0, graph.VertexCount);

            graph.Add(42);
            graph.Add(13);
            graph.Add(10);
            Assert.IsTrue(graph.Contains(42));
            Assert.IsTrue(graph.Contains(13));
            Assert.IsTrue(graph.Contains(10));

            graph.Add(new DirectedEdge <int>(42, 13));                  // 42 -> 13
            graph.Add(new DirectedEdge <int>(42, 10));                  // 42 -> 10
            Assert.AreEqual(2, graph.EdgeCount);
            Assert.IsTrue(graph.ContainsEdge(42, 13));
            Assert.IsTrue(graph.ContainsEdge(42, 10));

            graph.Remove(42);
            Assert.IsFalse(graph.Contains(42));
            Assert.AreEqual(0, graph.EdgeCount);
            Assert.AreEqual(2, graph.VertexCount);

            // undo removal of 42. This should re-add 42, but also re-add the edges
            CQManager.UndoLastCommand();
            Assert.AreEqual(2, graph.EdgeCount);
            Assert.IsTrue(graph.ContainsEdge(42, 13));
            Assert.IsTrue(graph.ContainsEdge(42, 10));
            Assert.IsTrue(graph.Contains(42));

            CQManager.ActivateCommandQueueStack(Guid.Empty);
        }
Example #8
0
        public void RandomTransitiveClosureAndCompositionTest()
        {
            for (int i = 0; i < RandomTests; i++)
            {
                DirectedGraph <int, DirectedEdge <int> > graph    = GenerateRandomIntegerDirectedGraph(MaxDirectedGraphSize);
                DirectedGraph <int, DirectedEdge <int> > composed = DirectedGraph <int, DirectedEdge <int> > .Compose(graph, graph, (a, b) => new DirectedEdge <int>(a, b));

                DirectedGraph <int, DirectedEdge <int> > closure = graph.TransitiveClosure();
                foreach (Edge <int> edge in composed.Edges)
                {
                    Assert.IsTrue(closure.ContainsEdge(edge.StartVertex, edge.EndVertex), "Failure on run " + i.ToString() + " based on seed " + _seed.ToString() + ".");
                }
            }
        }
Example #9
0
        public void TransitiveClosureCyclicTest()
        {
            DirectedGraph <int, DirectedEdge <int> > g = new DirectedGraph <int, DirectedEdge <int> >((a, b) => new DirectedEdge <int>(a, b));

            g.Add(new DirectedEdge <int>(1, 2));
            g.Add(new DirectedEdge <int>(2, 3));
            g.Add(new DirectedEdge <int>(3, 1));
            DirectedGraph <int, DirectedEdge <int> > h = g.TransitiveClosure();

            Assert.AreEqual(3, h.VertexCount);
            Assert.AreEqual(9, h.EdgeCount);
            Assert.IsTrue(h.ContainsEdge(1, 2));
            Assert.IsTrue(h.ContainsEdge(2, 3));
            Assert.IsTrue(h.ContainsEdge(3, 1));
            Assert.IsTrue(h.ContainsEdge(1, 3));
            Assert.IsTrue(h.ContainsEdge(1, 1));
            Assert.IsTrue(h.ContainsEdge(2, 1));
            Assert.IsTrue(h.ContainsEdge(2, 2));
            Assert.IsTrue(h.ContainsEdge(3, 2));
            Assert.IsTrue(h.ContainsEdge(3, 3));
        }
Example #10
0
        public void TransitiveClosureCyclicTest()
        {
            var g = new DirectedGraph <int, DirectedEdge <int> >((a, b) => new DirectedEdge <int>(a, b), isCommandified: false, isSynchronized: true);

            g.Add(new DirectedEdge <int>(1, 2));
            g.Add(new DirectedEdge <int>(2, 3));
            g.Add(new DirectedEdge <int>(3, 1));
            DirectedGraph <int, DirectedEdge <int> > h = g.TransitiveClosure();

            Assert.AreEqual(3, h.VertexCount);
            Assert.AreEqual(9, h.EdgeCount);
            Assert.IsTrue(h.ContainsEdge(1, 2));
            Assert.IsTrue(h.ContainsEdge(2, 3));
            Assert.IsTrue(h.ContainsEdge(3, 1));
            Assert.IsTrue(h.ContainsEdge(1, 3));
            Assert.IsTrue(h.ContainsEdge(1, 1));
            Assert.IsTrue(h.ContainsEdge(2, 1));
            Assert.IsTrue(h.ContainsEdge(2, 2));
            Assert.IsTrue(h.ContainsEdge(3, 2));
            Assert.IsTrue(h.ContainsEdge(3, 3));
        }
Example #11
0
        /// <summary>
        /// Generates a random integer graph of maxSize size. Size here denotes the amount of edges, nodes may be up to
        /// twice that amount.
        /// </summary>
        /// <param name="maxSize">The maximum amount of edges the graph contains.</param>
        /// <returns>The randomly generated graph.</returns>
        private DirectedGraph <int, DirectedEdge <int> > GenerateRandomIntegerDirectedGraph(int maxSize)
        {
            int size = _random.Next(maxSize);
            // create an integer graph and set the edge producer func
            DirectedGraph <int, DirectedEdge <int> > graph = new DirectedGraph <int, DirectedEdge <int> >((a, b) => new DirectedEdge <int>(a, b));

            for (int i = 0; i < size;)
            {
                int startNode = _random.Next(maxSize);
                int endNode   = _random.Next(maxSize);
                if (!graph.ContainsEdge(startNode, endNode))
                {
                    graph.Add(startNode);
                    graph.Add(endNode);
                    graph.Add(new DirectedEdge <int>(startNode, endNode));
                    i++;
                }
            }
            return(graph);
        }
Example #12
0
        public void TransitiveClosureBasicTest()
        {
            // create an integer graph and set the edge producer func
            DirectedGraph <int, DirectedEdge <int> > g = new DirectedGraph <int, DirectedEdge <int> >((a, b) => new DirectedEdge <int>(a, b));
            DirectedEdge <int> toAdd = new DirectedEdge <int>(1, 2);

            g.Add(toAdd);
            Assert.IsTrue(g.Contains(toAdd));
            g.Add(new DirectedEdge <int>(2, 3));
            g.Add(new DirectedEdge <int>(3, 4));
            DirectedGraph <int, DirectedEdge <int> > h = g.TransitiveClosure();

            Assert.IsTrue(h.VertexCount == 4);
            Assert.IsTrue(h.EdgeCount == 6);
            Assert.IsTrue(h.ContainsEdge(1, 2));
            Assert.IsTrue(h.ContainsEdge(2, 3));
            Assert.IsTrue(h.ContainsEdge(3, 4));
            Assert.IsTrue(h.ContainsEdge(1, 3));
            Assert.IsTrue(h.ContainsEdge(1, 4));
            Assert.IsTrue(h.ContainsEdge(2, 4));
        }
Example #13
0
        public void CommandifiedGraphAddRemoveGraphAndEdgesWithUndoTest()
        {
            Guid sessionId = Guid.NewGuid();

            CQManager.ActivateCommandQueueStack(sessionId);

            DirectedGraph <int, DirectedEdge <int> > graph = new DirectedGraph <int, DirectedEdge <int> >(true);

            graph.Add(42);
            graph.Add(13);
            graph.Add(10);
            graph.Add(new DirectedEdge <int>(42, 13));                  // 42 -> 13
            graph.Add(new DirectedEdge <int>(42, 10));                  // 42 -> 10
            Assert.IsTrue(graph.Contains(42));
            Assert.IsTrue(graph.Contains(13));
            Assert.IsTrue(graph.Contains(10));
            Assert.AreEqual(2, graph.EdgeCount);
            Assert.IsTrue(graph.ContainsEdge(42, 13));
            Assert.IsTrue(graph.ContainsEdge(42, 10));

            // create graph to add to this graph. Doesn't have to be a commandified graph, as we're not rolling back the actions on that graph.
            DirectedGraph <int, DirectedEdge <int> > graphToAdd = new DirectedGraph <int, DirectedEdge <int> >();

            graphToAdd.Add(1);
            graphToAdd.Add(2);
            graphToAdd.Add(3);
            graphToAdd.Add(new DirectedEdge <int>(1, 2));               // 1 -> 2
            graphToAdd.Add(new DirectedEdge <int>(1, 3));               // 1 -> 3
            graphToAdd.Add(new DirectedEdge <int>(2, 3));               // 2 -> 3
            Assert.AreEqual(3, graphToAdd.VertexCount);
            Assert.AreEqual(3, graphToAdd.EdgeCount);

            // add this graph to the main graph. This is an undoable action.
            graph.Add(graphToAdd);
            Assert.AreEqual(6, graph.VertexCount);
            Assert.AreEqual(5, graph.EdgeCount);
            Assert.IsTrue(graph.Contains(1));
            Assert.IsTrue(graph.Contains(2));
            Assert.IsTrue(graph.Contains(3));
            Assert.IsTrue(graph.ContainsEdge(1, 2));
            Assert.IsTrue(graph.ContainsEdge(1, 3));
            Assert.IsTrue(graph.ContainsEdge(2, 3));

            // undo add
            CQManager.UndoLastCommand();
            Assert.AreEqual(3, graph.VertexCount);
            Assert.AreEqual(2, graph.EdgeCount);
            Assert.IsFalse(graph.Contains(1));
            Assert.IsFalse(graph.Contains(2));
            Assert.IsFalse(graph.Contains(3));
            Assert.IsFalse(graph.ContainsEdge(1, 2));
            Assert.IsFalse(graph.ContainsEdge(1, 3));
            Assert.IsFalse(graph.ContainsEdge(2, 3));

            // redo
            CQManager.RedoLastCommand();
            Assert.AreEqual(6, graph.VertexCount);
            Assert.AreEqual(5, graph.EdgeCount);
            Assert.IsTrue(graph.Contains(1));
            Assert.IsTrue(graph.Contains(2));
            Assert.IsTrue(graph.Contains(3));
            Assert.IsTrue(graph.ContainsEdge(1, 2));
            Assert.IsTrue(graph.ContainsEdge(1, 3));
            Assert.IsTrue(graph.ContainsEdge(2, 3));

            // remove the graph we added
            graph.Remove(graphToAdd);
            Assert.AreEqual(3, graph.VertexCount);
            Assert.AreEqual(2, graph.EdgeCount);
            Assert.IsFalse(graph.Contains(1));
            Assert.IsFalse(graph.Contains(2));
            Assert.IsFalse(graph.Contains(3));
            Assert.IsFalse(graph.ContainsEdge(1, 2));
            Assert.IsFalse(graph.ContainsEdge(1, 3));
            Assert.IsFalse(graph.ContainsEdge(2, 3));

            CQManager.UndoLastCommand();
            Assert.AreEqual(6, graph.VertexCount);
            Assert.AreEqual(5, graph.EdgeCount);
            Assert.IsTrue(graph.Contains(1));
            Assert.IsTrue(graph.Contains(2));
            Assert.IsTrue(graph.Contains(3));
            Assert.IsTrue(graph.ContainsEdge(1, 2));
            Assert.IsTrue(graph.ContainsEdge(1, 3));
            Assert.IsTrue(graph.ContainsEdge(2, 3));

            DirectedEdge <int> newEdge = new DirectedEdge <int>(42, 1);                         // 42 -> 1

            graph.Add(newEdge);
            Assert.AreEqual(6, graph.EdgeCount);
            Assert.IsTrue(graph.ContainsEdge(42, 1));
            Assert.IsFalse(graph.ContainsEdge(1, 42));

            CQManager.UndoLastCommand();
            Assert.AreEqual(5, graph.EdgeCount);
            Assert.IsFalse(graph.ContainsEdge(42, 1));

            CQManager.RedoLastCommand();
            Assert.AreEqual(6, graph.EdgeCount);
            Assert.IsTrue(graph.ContainsEdge(42, 1));

            graph.Remove(newEdge);
            Assert.AreEqual(5, graph.EdgeCount);
            Assert.IsFalse(graph.ContainsEdge(42, 1));

            CQManager.UndoLastCommand();
            Assert.AreEqual(6, graph.EdgeCount);
            Assert.IsTrue(graph.ContainsEdge(42, 1));

            graph.Disconnect(42, 1, false);
            Assert.AreEqual(5, graph.EdgeCount);
            Assert.IsFalse(graph.ContainsEdge(42, 1));

            CQManager.UndoLastCommand();
            Assert.AreEqual(6, graph.EdgeCount);
            Assert.IsTrue(graph.ContainsEdge(42, 1));

            CQManager.ActivateCommandQueueStack(Guid.Empty);
        }
Example #14
0
        public void CommandifiedGraphAddRemoveVertexWithUndoTest()
        {
            Guid sessionId = Guid.NewGuid();
            CQManager.ActivateCommandQueueStack(sessionId);

            DirectedGraph<int, DirectedEdge<int>> graph = new DirectedGraph<int, DirectedEdge<int>>(true);
            graph.Add(42);
            Assert.IsTrue(graph.Contains(42));
            CQManager.UndoLastCommand();
            Assert.IsFalse(graph.Contains(42));
            Assert.AreEqual(0, graph.VertexCount);

            graph.Add(42);
            graph.Add(13);
            graph.Add(10);
            Assert.IsTrue(graph.Contains(42));
            Assert.IsTrue(graph.Contains(13));
            Assert.IsTrue(graph.Contains(10));

            graph.Add(new DirectedEdge<int>(42, 13));	// 42 -> 13
            graph.Add(new DirectedEdge<int>(42, 10));	// 42 -> 10
            Assert.AreEqual(2, graph.EdgeCount);
            Assert.IsTrue(graph.ContainsEdge(42, 13));
            Assert.IsTrue(graph.ContainsEdge(42, 10));

            graph.Remove(42);
            Assert.IsFalse(graph.Contains(42));
            Assert.AreEqual(0, graph.EdgeCount);
            Assert.AreEqual(2, graph.VertexCount);

            // undo removal of 42. This should re-add 42, but also re-add the edges
            CQManager.UndoLastCommand();
            Assert.AreEqual(2, graph.EdgeCount);
            Assert.IsTrue(graph.ContainsEdge(42, 13));
            Assert.IsTrue(graph.ContainsEdge(42, 10));
            Assert.IsTrue(graph.Contains(42));

            CQManager.ActivateCommandQueueStack(Guid.Empty);
        }
Example #15
0
        public void CommandifiedGraphAddRemoveGraphAndEdgesWithUndoTest()
        {
            Guid sessionId = Guid.NewGuid();
            CQManager.ActivateCommandQueueStack(sessionId);

            DirectedGraph<int, DirectedEdge<int>> graph = new DirectedGraph<int, DirectedEdge<int>>(true);
            graph.Add(42);
            graph.Add(13);
            graph.Add(10);
            graph.Add(new DirectedEdge<int>(42, 13));	// 42 -> 13
            graph.Add(new DirectedEdge<int>(42, 10));	// 42 -> 10
            Assert.IsTrue(graph.Contains(42));
            Assert.IsTrue(graph.Contains(13));
            Assert.IsTrue(graph.Contains(10));
            Assert.AreEqual(2, graph.EdgeCount);
            Assert.IsTrue(graph.ContainsEdge(42, 13));
            Assert.IsTrue(graph.ContainsEdge(42, 10));

            // create graph to add to this graph. Doesn't have to be a commandified graph, as we're not rolling back the actions on that graph.
            DirectedGraph<int, DirectedEdge<int>> graphToAdd = new DirectedGraph<int, DirectedEdge<int>>();
            graphToAdd.Add(1);
            graphToAdd.Add(2);
            graphToAdd.Add(3);
            graphToAdd.Add(new DirectedEdge<int>(1, 2));	// 1 -> 2
            graphToAdd.Add(new DirectedEdge<int>(1, 3));	// 1 -> 3
            graphToAdd.Add(new DirectedEdge<int>(2, 3));	// 2 -> 3
            Assert.AreEqual(3, graphToAdd.VertexCount);
            Assert.AreEqual(3, graphToAdd.EdgeCount);

            // add this graph to the main graph. This is an undoable action.
            graph.Add(graphToAdd);
            Assert.AreEqual(6, graph.VertexCount);
            Assert.AreEqual(5, graph.EdgeCount);
            Assert.IsTrue(graph.Contains(1));
            Assert.IsTrue(graph.Contains(2));
            Assert.IsTrue(graph.Contains(3));
            Assert.IsTrue(graph.ContainsEdge(1, 2));
            Assert.IsTrue(graph.ContainsEdge(1, 3));
            Assert.IsTrue(graph.ContainsEdge(2, 3));

            // undo add
            CQManager.UndoLastCommand();
            Assert.AreEqual(3, graph.VertexCount);
            Assert.AreEqual(2, graph.EdgeCount);
            Assert.IsFalse(graph.Contains(1));
            Assert.IsFalse(graph.Contains(2));
            Assert.IsFalse(graph.Contains(3));
            Assert.IsFalse(graph.ContainsEdge(1, 2));
            Assert.IsFalse(graph.ContainsEdge(1, 3));
            Assert.IsFalse(graph.ContainsEdge(2, 3));

            // redo
            CQManager.RedoLastCommand();
            Assert.AreEqual(6, graph.VertexCount);
            Assert.AreEqual(5, graph.EdgeCount);
            Assert.IsTrue(graph.Contains(1));
            Assert.IsTrue(graph.Contains(2));
            Assert.IsTrue(graph.Contains(3));
            Assert.IsTrue(graph.ContainsEdge(1, 2));
            Assert.IsTrue(graph.ContainsEdge(1, 3));
            Assert.IsTrue(graph.ContainsEdge(2, 3));

            // remove the graph we added
            graph.Remove(graphToAdd);
            Assert.AreEqual(3, graph.VertexCount);
            Assert.AreEqual(2, graph.EdgeCount);
            Assert.IsFalse(graph.Contains(1));
            Assert.IsFalse(graph.Contains(2));
            Assert.IsFalse(graph.Contains(3));
            Assert.IsFalse(graph.ContainsEdge(1, 2));
            Assert.IsFalse(graph.ContainsEdge(1, 3));
            Assert.IsFalse(graph.ContainsEdge(2, 3));

            CQManager.UndoLastCommand();
            Assert.AreEqual(6, graph.VertexCount);
            Assert.AreEqual(5, graph.EdgeCount);
            Assert.IsTrue(graph.Contains(1));
            Assert.IsTrue(graph.Contains(2));
            Assert.IsTrue(graph.Contains(3));
            Assert.IsTrue(graph.ContainsEdge(1, 2));
            Assert.IsTrue(graph.ContainsEdge(1, 3));
            Assert.IsTrue(graph.ContainsEdge(2, 3));

            DirectedEdge<int> newEdge = new DirectedEdge<int>(42, 1);		// 42 -> 1
            graph.Add(newEdge);
            Assert.AreEqual(6, graph.EdgeCount);
            Assert.IsTrue(graph.ContainsEdge(42, 1));
            Assert.IsFalse(graph.ContainsEdge(1, 42));

            CQManager.UndoLastCommand();
            Assert.AreEqual(5, graph.EdgeCount);
            Assert.IsFalse(graph.ContainsEdge(42, 1));

            CQManager.RedoLastCommand();
            Assert.AreEqual(6, graph.EdgeCount);
            Assert.IsTrue(graph.ContainsEdge(42, 1));

            graph.Remove(newEdge);
            Assert.AreEqual(5, graph.EdgeCount);
            Assert.IsFalse(graph.ContainsEdge(42, 1));

            CQManager.UndoLastCommand();
            Assert.AreEqual(6, graph.EdgeCount);
            Assert.IsTrue(graph.ContainsEdge(42, 1));

            graph.Disconnect(42, 1, false);
            Assert.AreEqual(5, graph.EdgeCount);
            Assert.IsFalse(graph.ContainsEdge(42, 1));

            CQManager.UndoLastCommand();
            Assert.AreEqual(6, graph.EdgeCount);
            Assert.IsTrue(graph.ContainsEdge(42, 1));

            CQManager.ActivateCommandQueueStack(Guid.Empty);
        }
Example #16
0
 public bool ContainsEdge(Region nodeFrom, Region nodeTo)
 {
     return(graph.ContainsEdge(nodeTo, nodeFrom));
 }
        public void TestVerifiedContraction6DuplicateForward()
        {
            var graph = new DirectedGraph<CHEdgeData>();
            var witnessCalculator = new DykstraWitnessCalculator();
            var preProcessor = new CHPreprocessor(graph,
                new EdgeDifferenceContractedSearchSpace(graph, witnessCalculator), witnessCalculator);

            var vertex1 = graph.AddVertex(1, 0);
            var vertex2 = graph.AddVertex(2, 0);
            var vertex3 = graph.AddVertex(3, 0);
            var vertex4 = graph.AddVertex(4, 0);

            graph.AddEdge(vertex1, vertex3, new CHEdgeData(1, true, false, true, 10));
            graph.AddEdge(vertex3, vertex1, new CHEdgeData(1, false, true, false, 10));
            graph.AddEdge(vertex2, vertex3, new CHEdgeData(1, true, true, false, 10));
            graph.AddEdge(vertex3, vertex2, new CHEdgeData(1, false, false, true, 10));

            graph.AddEdge(vertex1, vertex4, new CHEdgeData(1, true, true, false, 15));
            graph.AddEdge(vertex4, vertex1, new CHEdgeData(1, false, false, true, 15));
            graph.AddEdge(vertex2, vertex4, new CHEdgeData(1, true, false, true, 15));
            graph.AddEdge(vertex4, vertex2, new CHEdgeData(1, false, true, false, 15));

            preProcessor.Contract(3);
            Assert.IsTrue(graph.ContainsEdge(vertex1, vertex2, new CHEdgeData(3, false, true, 20)));
            Assert.IsTrue(graph.ContainsEdge(vertex2, vertex1, new CHEdgeData(3, true, false, 20)));

            preProcessor.Contract(4);
            Assert.IsTrue(graph.ContainsEdge(vertex1, vertex2, new CHEdgeData(4, true, false, 30)));
            Assert.IsTrue(graph.ContainsEdge(vertex2, vertex1, new CHEdgeData(4, false, true, 30)));
            Assert.IsTrue(graph.ContainsEdge(vertex1, vertex2, new CHEdgeData(3, false, true, 20)));
            Assert.IsTrue(graph.ContainsEdge(vertex2, vertex1, new CHEdgeData(3, true, false, 20)));
        }
        public void TestVerifiedContraction4ReplacePrevious()
        {
            var graph = new DirectedGraph<CHEdgeData>();
            var vertex1 = graph.AddVertex(1, 0);
            var vertex2 = graph.AddVertex(2, 0);
            var vertex3 = graph.AddVertex(3, 0);
            var vertex4 = graph.AddVertex(4, 0);

            graph.AddEdge(vertex1, vertex4, new CHEdgeData(1, true, true, true, 15));
            graph.AddEdge(vertex4, vertex1, new CHEdgeData(1, false, true, true, 15));
            graph.AddEdge(vertex2, vertex4, new CHEdgeData(1, true, true, true, 15));
            graph.AddEdge(vertex4, vertex2, new CHEdgeData(1, false, true, true, 15));

            var witnessCalculator = new DykstraWitnessCalculator();
            var preProcessor = new CHPreprocessor(graph,
                new EdgeDifferenceContractedSearchSpace(graph, witnessCalculator), witnessCalculator);
            preProcessor.Contract(4);

            Assert.IsTrue(graph.ContainsEdge(vertex1, vertex2, new CHEdgeData(4, true, true, 30)));
            Assert.IsTrue(graph.ContainsEdge(vertex2, vertex1, new CHEdgeData(4, true, true, 30)));

            // add edges later to prevent witnesses from being found!
            graph.AddEdge(vertex1, vertex3, new CHEdgeData(1, true, true, true, 10));
            graph.AddEdge(vertex3, vertex1, new CHEdgeData(1, false, true, true, 10));
            graph.AddEdge(vertex2, vertex3, new CHEdgeData(1, true, true, true, 10));
            graph.AddEdge(vertex3, vertex2, new CHEdgeData(1, false, true, true, 10));

            preProcessor.Contract(3);
            Assert.IsTrue(graph.ContainsEdge(vertex1, vertex2, new CHEdgeData(3, true, true, 20)));
            Assert.IsTrue(graph.ContainsEdge(vertex2, vertex1, new CHEdgeData(3, true, true, 20)));
        }