diff --git a/dag/graph.go b/dag/graph.go index 7fac2a534..41d766f40 100644 --- a/dag/graph.go +++ b/dag/graph.go @@ -82,6 +82,11 @@ func (g *Graph) Replace(original, replacement Vertex) bool { return false } + // If they're the same, then don't do anything + if original == replacement { + return true + } + // Add our new vertex, then copy all the edges g.Add(replacement) for _, target := range g.DownEdges(original).List() { diff --git a/dag/graph_test.go b/dag/graph_test.go index e67535659..8dd05e95e 100644 --- a/dag/graph_test.go +++ b/dag/graph_test.go @@ -63,6 +63,22 @@ func TestGraph_replace(t *testing.T) { } } +func TestGraph_replaceSelf(t *testing.T) { + var g Graph + g.Add(1) + g.Add(2) + g.Add(3) + g.Connect(BasicEdge(1, 2)) + g.Connect(BasicEdge(2, 3)) + g.Replace(2, 2) + + actual := strings.TrimSpace(g.String()) + expected := strings.TrimSpace(testGraphReplaceSelfStr) + if actual != expected { + t.Fatalf("bad: %s", actual) + } +} + const testGraphBasicStr = ` 1 3 @@ -88,3 +104,11 @@ const testGraphReplaceStr = ` 42 3 ` + +const testGraphReplaceSelfStr = ` +1 + 2 +2 + 3 +3 +`