require 'spec_helper' module Graph describe Vertex do let (:v) { Vertex.new } describe "#initialize" do it "creates an empty vertex" do v = Vertex.new v.edges.should be_empty end end # #initialize describe "adds attribues" do it "adds then reports arbitrary attributes" do v.score = 15 v.score.should == 15 end end # adds attributes describe "#<<" do it "adds a single edge between vertices" do v.neighbours.should be_empty v.edges.should be_empty v1 = Vertex.new v << v1 v1.id = :v1 # Need this to ensure that v != v1 v.should have(1).edges v1.should have(1).edges e = v.edges[0] v1.edges.should include(e) v.should have(1).neighbours v.neighbours.should include(v1) v.neighbours.should_not include(v) v1.should have(1).neighbours v1.neighbours.should include(v) v1.neighbours.should_not include(v1) end it "adds a single edge as a self-loop" do v.neighbours.should be_empty v.edges.should be_empty v << v v.should have(1).edges v.should have(1).neighbours v.neighbours.should include(v) end end # #<< describe "connect" do it "connects two vertices" do v1 = Vertex.new v1.id = :v1 # Need this to ensure that v != v1 e = v.connect v1 v.should have(1).neighbours v.neighbours.should include(v1) v.neighbours.should_not include(v) v1.should have(1).neighbours v1.neighbours.should include(v) v1.neighbours.should_not include(v1) v.should have(1).edges v.edges.should include(e) v1.should have(1).edges v1.edges.should include(e) e.should have(2).vertices e.vertices.should include(v) e.vertices.should include(v1) e.should have(2).connections end it "creates a self-connection" do e = v.connect v v.should have(1).neighbours v.neighbours.should include(v) v.should have(1).edges v.edges.should include(e) e.should have(2).vertices e.vertices.uniq.length.should == 1 e.vertices.should include(v) e.should have(2).connections end end # #connect end end