bf2e601c9f0d4b057ca133d811db4585350e7d68
[graph.njae.git] / spec / graph / vertex_spec.rb
1 require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
3 module GraphNjae
4 describe Vertex do
5 let (:v) { Vertex.new }
6
7 describe "#initialize" do
8 it "creates an empty vertex" do
9 v = Vertex.new
10 v.edges.should be_empty
11 end
12 end # #initialize
13
14 describe "adds attribues" do
15 it "adds then reports arbitrary attributes" do
16 v.score = 15
17 v.score.should == 15
18 end
19 end # adds attributes
20
21 describe "#<<" do
22 it "adds a single edge between vertices" do
23 v.neighbours.should be_empty
24 v.edges.should be_empty
25
26 v1 = Vertex.new
27 v << v1
28
29 v1.id = :v1 # Need this to ensure that v != v1
30
31 v.should have(1).edges
32 v1.should have(1).edges
33 e = v.edges[0]
34 v1.edges.should include(e)
35
36 v.should have(1).neighbours
37 v.neighbours.should include(v1)
38 v.neighbours.should_not include(v)
39 v1.should have(1).neighbours
40 v1.neighbours.should include(v)
41 v1.neighbours.should_not include(v1)
42 end
43
44 it "adds a single edge as a self-loop" do
45 v.neighbours.should be_empty
46 v.edges.should be_empty
47
48 v << v
49
50 v.should have(1).edges
51 v.should have(1).neighbours
52 v.neighbours.should include(v)
53 end
54 end # #<<
55
56 describe "connect" do
57 it "connects two vertices" do
58 v1 = Vertex.new
59 v1.id = :v1 # Need this to ensure that v != v1
60
61 e = v.connect v1
62
63 v.should have(1).neighbours
64 v.neighbours.should include(v1)
65 v.neighbours.should_not include(v)
66
67 v1.should have(1).neighbours
68 v1.neighbours.should include(v)
69 v1.neighbours.should_not include(v1)
70
71 v.should have(1).edges
72 v.edges.should include(e)
73 v1.should have(1).edges
74 v1.edges.should include(e)
75
76 e.should have(2).vertices
77 e.vertices.should include(v)
78 e.vertices.should include(v1)
79
80 e.should have(2).connections
81 end
82
83 it "creates a self-connection" do
84 e = v.connect v
85
86 v.should have(1).neighbours
87 v.neighbours.should include(v)
88
89 v.should have(1).edges
90 v.edges.should include(e)
91
92 e.should have(2).vertices
93 e.vertices.uniq.length.should == 1
94 e.vertices.should include(v)
95
96 e.should have(2).connections
97 end
98
99 end # #connect
100 end
101 end