public void TestVerifiedContraction5KeepPrevious()
        {
            var graph             = new MemoryDirectedGraph <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)));
        }
        public void TestVerifiedContraction6DuplicateForward()
        {
            var graph = new MemoryDirectedGraph<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 MemoryDirectedGraph<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)));
        }