From eae33f92dbeb255dcd4c8bc3e748c7d43b2fd8e9 Mon Sep 17 00:00:00 2001 From: D4L Date: Wed, 2 Jan 2013 14:08:16 -0500 Subject: [PATCH] Make graph dup do a deep copy. Closes #6 --- lib/abstract_graph/graph.rb | 1 + lib/abstract_graph/graph/dup.rb | 14 ++++++++++ spec/abstract_graph/graph/dup_spec.rb | 37 +++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 lib/abstract_graph/graph/dup.rb create mode 100644 spec/abstract_graph/graph/dup_spec.rb diff --git a/lib/abstract_graph/graph.rb b/lib/abstract_graph/graph.rb index 1b6889e..4e66a92 100644 --- a/lib/abstract_graph/graph.rb +++ b/lib/abstract_graph/graph.rb @@ -17,3 +17,4 @@ class Graph require "abstract_graph/graph/initialize" require "abstract_graph/graph/add_vertex" require "abstract_graph/graph/has_vertex" +require "abstract_graph/graph/dup" diff --git a/lib/abstract_graph/graph/dup.rb b/lib/abstract_graph/graph/dup.rb new file mode 100644 index 0000000..2fbc77c --- /dev/null +++ b/lib/abstract_graph/graph/dup.rb @@ -0,0 +1,14 @@ +# required in "abstract_graph/graph" + +module AbstractGraph + class Graph + + # does a deep copy of the graph + def dup + other = Graph.new + other.vertices = @vertices.dup + other + end + + end +end diff --git a/spec/abstract_graph/graph/dup_spec.rb b/spec/abstract_graph/graph/dup_spec.rb new file mode 100644 index 0000000..43f45e9 --- /dev/null +++ b/spec/abstract_graph/graph/dup_spec.rb @@ -0,0 +1,37 @@ +require 'spec_helper' + +module AbstractGraph + module Composition + describe Graph do + + before :each do + @graph = Graph.new + @graph.add_vertex "MyVertex" + end + + describe "#dup" do + + it "returns a graph object" do + @graph.dup.should be_an_instance_of(Graph) + end + + it "has a different id than the original graph" do + @graph.object_id.should_not == @graph.dup.object_id + end + + it "copies over the existing vertices" do + graphdup = @graph.dup + graphdup.has_vertex?( "MyVertex" ).should be_true + end + + it "will not modify the original if it is modified" do + graphdup = @graph.dup + graphdup.vertices.clear + @graph.vertices.size.should == 1 + end + + end + + end + end +end