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); }
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()); }
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 }
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); }
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); }
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); }
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"); }