Пример #1
0
        public void Merge()
        {
            var emptyEdge1 = new MergedEdge <int, Edge <int> >(1, 2);
            var emptyEdge2 = new MergedEdge <int, Edge <int> >(1, 2);
            var subEdge1   = new Edge <int>(1, 2);
            var subEdge2   = new Edge <int>(1, 2);
            var subEdge3   = new Edge <int>(1, 2);
            var edge1      = new MergedEdge <int, Edge <int> >(1, 2);

            edge1.Edges.Add(subEdge1);
            var edge2 = new MergedEdge <int, Edge <int> >(1, 2);

            edge2.Edges.Add(subEdge2);
            edge2.Edges.Add(subEdge3);

            MergedEdge <int, Edge <int> > mergedEdge = MergedEdge.Merge(emptyEdge1, emptyEdge2);

            Assert.IsNotNull(mergedEdge);
            CollectionAssert.IsEmpty(mergedEdge.Edges);

            mergedEdge = MergedEdge.Merge(emptyEdge1, edge1);
            Assert.IsNotNull(mergedEdge);
            CollectionAssert.AreEqual(new[] { subEdge1 }, mergedEdge.Edges);

            mergedEdge = MergedEdge.Merge(edge1, emptyEdge1);
            Assert.IsNotNull(mergedEdge);
            CollectionAssert.AreEqual(new[] { subEdge1 }, mergedEdge.Edges);

            mergedEdge = MergedEdge.Merge(edge1, edge2);
            Assert.IsNotNull(mergedEdge);
            CollectionAssert.AreEqual(new[] { subEdge1, subEdge2, subEdge3 }, mergedEdge.Edges);
        }
Пример #2
0
        public void ObjectToString()
        {
            var edge1 = new MergedEdge <int, Edge <int> >(1, 2);
            var edge2 = new MergedEdge <int, Edge <int> >(2, 1);

            Assert.AreEqual("1 -> 2", edge1.ToString());
            Assert.AreEqual("2 -> 1", edge2.ToString());
        }
Пример #3
0
        public void Merge_Throws()
        {
            var edge = new MergedEdge <int, Edge <int> >(1, 2);

            // ReSharper disable ReturnValueOfPureMethodIsNotUsed
            // ReSharper disable AssignNullToNotNullAttribute
            Assert.Throws <ArgumentNullException>(() => MergedEdge.Merge(edge, null));
            Assert.Throws <ArgumentNullException>(() => MergedEdge.Merge(null, edge));
            Assert.Throws <ArgumentNullException>(() => MergedEdge.Merge <int, Edge <int> >(null, null));
            // ReSharper restore AssignNullToNotNullAttribute
            // ReSharper restore ReturnValueOfPureMethodIsNotUsed
        }
Пример #4
0
        public void Equals()
        {
            var edge1 = new MergedEdge <int, Edge <int> >(1, 2);
            var edge2 = new MergedEdge <int, Edge <int> >(1, 2);
            var edge3 = new MergedEdge <int, Edge <int> >(2, 1);
            var edge4 = new MergedEdge <int, Edge <int> >(1, 2);

            edge4.Edges.Add(edge1);

            Assert.AreEqual(edge1, edge1);
            Assert.AreNotEqual(edge1, edge2);
            Assert.AreNotEqual(edge1, edge3);
            Assert.AreNotEqual(edge1, edge4);

            Assert.AreNotEqual(edge1, null);
        }
Пример #5
0
        public void Edges()
        {
            var edge = new MergedEdge <int, Edge <int> >(1, 2);

            CollectionAssert.IsEmpty(edge.Edges);

            var subEdge1 = new Edge <int>(1, 2);

            edge.Edges.Add(subEdge1);
            CollectionAssert.AreEqual(new[] { subEdge1 }, edge.Edges);

            var subEdge2 = new MergedEdge <int, Edge <int> >(1, 2);

            edge.Edges.Add(subEdge2);
            CollectionAssert.AreEqual(new[] { subEdge1, subEdge2 }, edge.Edges);

            edge.Edges.RemoveAt(1);
            CollectionAssert.AreEqual(new[] { subEdge1 }, edge.Edges);

            edge.Edges.Remove(subEdge1);
            CollectionAssert.IsEmpty(edge.Edges);
        }
Пример #6
0
            public static MergedEdge MergeSameEdges(IEnumerable <Edge> edges)
            {
                if (edges == null)
                {
                    return(null);
                }
                if (edges.Count() == 0)
                {
                    return(null);
                }
                if (edges.Count() == 1)
                {
                    return(new MergedEdge(edges.First()));
                }
                var        list = edges.ToList();
                MergedEdge ret  = new MergedEdge(edges.First());

                for (int i = 1; i < list.Count; i++)
                {
                    ret = ret.MergeWith(list[i]);
                }
                return(ret);
            }
Пример #7
0
        public void Generate_WithEscape()
        {
            const string vertex1 = "Vertex1&/<>@~|";
            const string vertex2 = "Vertex2æéèê룤¶ÀÁÂÃÄÅ";
            const string vertex3 = "\"Vertex3\"\nΣη← ♠\\[]()";
            const string vertex4 = "Vertex4∴∞⇐ℜΩ÷嗷娪";

            var graph = new AdjacencyGraph <string, MergedEdge <string, Edge <string> > >();

            graph.AddVertexRange(new[] { vertex3, vertex4 });

            var edge12 = new Edge <string>(vertex1, vertex2);
            var edge24 = new Edge <string>(vertex2, vertex4);
            var edge31 = new Edge <string>(vertex3, vertex1);
            var edge32 = new Edge <string>(vertex3, vertex2);
            var edge33 = new Edge <string>(vertex3, vertex3);
            var edge41 = new Edge <string>(vertex4, vertex1);

            var mergeEdge1 = new MergedEdge <string, Edge <string> >(vertex4, vertex4);

            mergeEdge1.Edges.Add(edge41);
            mergeEdge1.Edges.Add(edge12);
            mergeEdge1.Edges.Add(edge24);

            var mergeEdge2 = new MergedEdge <string, Edge <string> >(vertex3, vertex3);

            mergeEdge2.Edges.Add(edge33);

            var mergeEdge3 = new MergedEdge <string, Edge <string> >(vertex3, vertex4);

            mergeEdge3.Edges.Add(edge32);
            mergeEdge3.Edges.Add(edge24);

            var mergeEdge4 = new MergedEdge <string, Edge <string> >(vertex3, vertex4);

            mergeEdge4.Edges.Add(edge31);
            mergeEdge4.Edges.Add(edge12);
            mergeEdge4.Edges.Add(edge24);

            graph.AddEdgeRange(new[]
            {
                mergeEdge1, mergeEdge2, mergeEdge3, mergeEdge4
            });

            const string expectedVertex1 = @"Vertex1&/<>@~|";
            const string expectedVertex2 = @"Vertex2æéèê룤¶ÀÁÂÃÄÅ";
            const string expectedVertex3 = @"\""Vertex3\""\nΣη← ♠\\[]()";
            const string expectedVertex4 = @"Vertex4∴∞⇐ℜΩ÷嗷娪";
            string       expectedDot     =
                @"digraph G {" + Environment.NewLine +
                @"node [fontname=""Tahoma"", fontsize=8.25, shape=box, style=filled, fillcolor=""#FFFFE0FF""];" + Environment.NewLine +
                @"edge [fontname=""Tahoma"", fontsize=8.25];" + Environment.NewLine +
                @"0 [label=""" + expectedVertex3 + @"""];" + Environment.NewLine +
                @"1 [label=""" + expectedVertex4 + @"""];" + Environment.NewLine +
                @"0 -> 0 [label=""1\n  " + expectedVertex3 + @" -> " + expectedVertex3 + @"\n""];" + Environment.NewLine +
                @"0 -> 1 [label=""2\n  " + expectedVertex3 + @" -> " + expectedVertex2 + @"\n  " + expectedVertex2 + @" -> " + expectedVertex4 + @"\n""];" + Environment.NewLine +
                @"0 -> 1 [label=""3\n  " + expectedVertex3 + @" -> " + expectedVertex1 + @"\n  " + expectedVertex1 + @" -> " + expectedVertex2 + @"\n  " + expectedVertex2 + @" -> " + expectedVertex4 + @"\n""];" + Environment.NewLine +
                @"1 -> 1 [label=""3\n  " + expectedVertex4 + @" -> " + expectedVertex1 + @"\n  " + expectedVertex1 + @" -> " + expectedVertex2 + @"\n  " + expectedVertex2 + @" -> " + expectedVertex4 + @"\n""];" + Environment.NewLine +
                @"}";

            var dotEngine = new TestDotEngine
            {
                ExpectedDot = expectedDot
            };

            var algorithm = new EdgeMergeCondensatedGraphRenderer <string, Edge <string> >(graph);

            algorithm.Generate(dotEngine, "NotSaved.dot");
        }