e.value3.should == :v3
e.value4.should be_nil
end
-
end # #initialize
describe "adds attribues" do
describe "#<<" do
it "adds a new vertex to an edge (with a connection)" do
e.connections.should be_empty
- v1 = Vertex.new
- v2 = Vertex.new
+ v1 = Vertex.new :name => :v1
+ v2 = Vertex.new :name => :v2
e << v1
e.should have(1).connections
e.should have(1).vertices
e.vertices.should include(v1)
+ v1.edges.should include(e)
e << v2
e.should have(2).connections
e.should have(2).vertices
e.vertices.should include(v1)
e.vertices.should include(v2)
+ v2.edges.should include(e)
end
it "adds several vertices to an edge" do
e.connections.should be_empty
- v1 = Vertex.new
- v2 = Vertex.new
+ v1 = Vertex.new :name => :v1
+ v2 = Vertex.new :name => :v2
e << v1 << v2
e.vertices.should include(v1)
e.vertices.should include(v2)
describe "connection_at" do
it "returns the connection that links to a vertex" do
e.connections.should be_empty
- v1 = Vertex.new
- v2 = Vertex.new
+ v1 = Vertex.new :name => :v1
+ v2 = Vertex.new :name => :v2
e << v1 << v2
e.connection_at(v1).end.should be v1
it "returns nil if there is no connection to that vertex" do
e.connections.should be_empty
- v1 = Vertex.new
- v2 = Vertex.new
- v3 = Vertex.new
+ v1 = Vertex.new :name => :v1
+ v2 = Vertex.new :name => :v2
+ v3 = Vertex.new :name => :v3
e << v1 << v2
e.connection_at(v3).should be nil
it "returns the vertex for a self-loop" do
e.connections.should be_empty
- v1 = Vertex.new
+ v1 = Vertex.new :name => :v1
e << v1 << v1
e.connection_at(v1).end.should be v1
end
-
-
end # #connection_at
+
+ describe "other_end" do
+ it "returns the vertex at the other end of the given one" do
+ e.connections.should be_empty
+ v1 = Vertex.new :name => :v1
+ v2 = Vertex.new :name => :v2
+ e << v1 << v2
+
+ e.other_end(v1).should be v2
+ e.other_end(v2).should be v1
+ end
+
+ it "returns the same vertex in a self-loop" do
+ e.connections.should be_empty
+ v1 = Vertex.new :name => :v1
+ e << v1 << v1
+
+ e.other_end(v1).should be v1
+ end
+
+ it "returns one of the connected edges if given a vertex not connected to it" do
+ e.connections.should be_empty
+ v1 = Vertex.new :name => :v1
+ v2 = Vertex.new :name => :v2
+ v3 = Vertex.new :name => :v3
+ e << v1 << v2
+
+ [v1, v2].should include e.other_end(v3)
+ end
+
+ it "returns nil if it can't return something sensible" do
+ v1 = Vertex.new :name => :v1
+ e.other_end(v1).should be_nil
+ e << v1
+ e.other_end(v1).should be_nil
+ end
+ end # other_end
end # Edge
describe Connection do