Example #1
0
 /// <summary>
 /// Gets sequence 1, the first vertices right after the start vertex.
 /// </summary>
 public static uint[] GetSequence1 <T>(this EdgePath <T> path, DirectedDynamicGraph.EdgeEnumerator enumerator)
     where T : struct
 {
     return(path.GetSequence1(enumerator, int.MaxValue));
 }
Example #2
0
        public void TestGetSequence1()
        {
            // build graph.
            var graph      = new DirectedDynamicGraph(ContractedEdgeDataSerializer.DynamicFixedSize);
            var e1         = graph.AddEdge(0, 1, 100, null);
            var e2         = graph.AddEdge(1, 2, 100, null);
            var e3         = graph.AddEdge(2, 6, 100, null, 4, new uint[] { 3 }, new uint[] { 5 });
            var e4         = graph.AddEdge(6, 16, 100, null, 11, new uint[] { 7, 8, 9, 10 }, new uint[] { 12, 13, 14, 15 });
            var enumerator = graph.GetEdgeEnumerator();

            // build and test getting sequences from paths.
            var path = new EdgePath <float>(0);
            var s    = path.GetSequence1(enumerator);

            Assert.IsNotNull(s);
            Assert.AreEqual(0, s.Length);

            path = new EdgePath <float>(1, 100, new EdgePath <float>(0));
            s    = path.GetSequence1(enumerator);
            Assert.IsNotNull(s);
            Assert.AreEqual(1, s.Length);
            Assert.AreEqual(1, s[0]);

            path = new EdgePath <float>(2, 200, e2 + 1, new EdgePath <float>(1, 100, new EdgePath <float>(0)));
            s    = path.GetSequence1(enumerator);
            Assert.IsNotNull(s);
            Assert.AreEqual(2, s.Length);
            Assert.AreEqual(1, s[0]);
            Assert.AreEqual(2, s[1]);

            path = new EdgePath <float>(2, 200, e2 + 1, new EdgePath <float>(1, 100, new EdgePath <float>(0)));
            s    = path.GetSequence1(enumerator, 1);
            Assert.IsNotNull(s);
            Assert.AreEqual(1, s.Length);
            Assert.AreEqual(1, s[0]);

            path = new EdgePath <float>(6, 300, e3 + 1, new EdgePath <float>(2));
            s    = path.GetSequence1(enumerator);
            Assert.IsNotNull(s);
            Assert.AreEqual(1, s.Length);
            Assert.AreEqual(3, s[0]);

            path = new EdgePath <float>(6, 200, e3 + 1, new EdgePath <float>(2, 100, e2 + 1, new EdgePath <float>(1)));
            s    = path.GetSequence1(enumerator);
            Assert.IsNotNull(s);
            Assert.AreEqual(2, s.Length);
            Assert.AreEqual(2, s[0]);
            Assert.AreEqual(3, s[1]);

            path = new EdgePath <float>(6, 200, e3 + 1, new EdgePath <float>(2, 100, e2 + 1, new EdgePath <float>(1, 100, new EdgePath <float>(0))));
            s    = path.GetSequence1(enumerator);
            Assert.IsNotNull(s);
            Assert.AreEqual(3, s.Length);
            Assert.AreEqual(1, s[0]);
            Assert.AreEqual(2, s[1]);
            Assert.AreEqual(3, s[2]);
            s = path.GetSequence1(enumerator, 1);
            Assert.IsNotNull(s);
            Assert.AreEqual(1, s.Length);
            Assert.AreEqual(1, s[0]);
            s = path.GetSequence1(enumerator, 2);
            Assert.IsNotNull(s);
            Assert.AreEqual(2, s.Length);
            Assert.AreEqual(1, s[0]);
            Assert.AreEqual(2, s[1]);

            path = new EdgePath <float>(16, 400, e4 + 1, new EdgePath <float>(6));
            s    = path.GetSequence1(enumerator);
            Assert.IsNotNull(s);
            Assert.AreEqual(4, s.Length);
            Assert.AreEqual(7, s[0]);
            Assert.AreEqual(8, s[1]);
            Assert.AreEqual(9, s[2]);
            Assert.AreEqual(10, s[3]);
            s = path.GetSequence1(enumerator, 1);
            Assert.IsNotNull(s);
            Assert.AreEqual(1, s.Length);
            Assert.AreEqual(10, s[0]);
            s = path.GetSequence1(enumerator, 3);
            Assert.IsNotNull(s);
            Assert.AreEqual(3, s.Length);
            Assert.AreEqual(8, s[0]);
            Assert.AreEqual(9, s[1]);
            Assert.AreEqual(10, s[2]);

            // build graph.
            graph      = new DirectedDynamicGraph(ContractedEdgeDataSerializer.DynamicFixedSize);
            e1         = graph.AddEdge(0, 1, 100, null);
            e2         = graph.AddEdge(1, 2, 100, null);
            e3         = graph.AddEdge(2, 10, 100, null, 6, new uint[] { 3, 4, 5 }, new uint[] { 7, 8, 9 });
            enumerator = graph.GetEdgeEnumerator();

            path = new EdgePath <float>(10, 300, e3 + 1, new EdgePath <float>(2, 200, e2 + 1, new EdgePath <float>(1, 200, e1 + 1, new EdgePath <float>(0))));
            s    = path.GetSequence1(enumerator);
            Assert.IsNotNull(s);
            Assert.AreEqual(5, s.Length);
            Assert.AreEqual(1, s[0]);
            Assert.AreEqual(2, s[1]);
            Assert.AreEqual(3, s[2]);
            Assert.AreEqual(4, s[3]);
            Assert.AreEqual(5, s[4]);

            path = new EdgePath <float>(10, 300, e3 + 1, new EdgePath <float>(2, 200, e2 + 1, new EdgePath <float>(1, 200, e1 + 1, new EdgePath <float>(0))));
            s    = path.GetSequence1(enumerator, 3);
            Assert.IsNotNull(s);
            Assert.AreEqual(3, s.Length);
            Assert.AreEqual(1, s[0]);
            Assert.AreEqual(2, s[1]);
            Assert.AreEqual(3, s[2]);
        }