graph.njae 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.2.3
data/graph.njae.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "graph.njae"
8
- s.version = "0.2.2"
8
+ s.version = "0.2.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Neil Smith"]
@@ -31,10 +31,12 @@ module GraphNjae
31
31
 
32
32
  # Return the set of neighbouring vertices
33
33
  def neighbours
34
- vertices = self.edges.map {|e| e.vertices}.flatten
35
- vertices_to_me = vertices.select {|v| v == self}
36
- other_vertices = vertices.select {|v| v != self}
37
- (vertices_to_me[1..-1] || []) + other_vertices
34
+ #vertices = self.edges.map {|e| e.vertices}.flatten
35
+ #vertices_to_me = vertices.select {|v| v == self}
36
+ #other_vertices = vertices.select {|v| v != self}
37
+ #(vertices_to_me[1..-1] || []) + other_vertices#
38
+ self.edges.map {|e| e.vertices.take_while {|v| v != self} +
39
+ e.vertices.drop_while {|v| v != self}[1..-1]}.flatten
38
40
  end
39
41
 
40
42
  end
@@ -97,5 +97,130 @@ module GraphNjae
97
97
  end
98
98
 
99
99
  end # #connect
100
+
101
+ describe "#neighbours" do
102
+ it "finds neighbours of a self loop" do
103
+ v << v
104
+ v.should have(1).neighbours
105
+ v.neighbours.should include v
106
+ end
107
+
108
+ it "finds neighbours on an edge" do
109
+ v1 = Vertex.new
110
+ v << v1
111
+ v.should have(1).neighbours
112
+ v.neighbours.should include v1
113
+ v1.should have(1).neighbours
114
+ v1.neighbours.should include v
115
+ end
116
+
117
+ it "finds neighbours with multiple edges" do
118
+ v1 = Vertex.new
119
+ v1.id = :v1
120
+ v << v1
121
+ v1 << v
122
+ v.should have(2).neighbours
123
+ v.neighbours.should include v1
124
+ v.neighbours.should_not include v
125
+ v1.should have(2).neighbours
126
+ v1.neighbours.should include v
127
+ v1.neighbours.should_not include v1
128
+ end
129
+
130
+ it "finds neighbours with multiple self loops" do
131
+ v << v << v << v
132
+ v.should have(3).neighbours
133
+ v.neighbours.should include v
134
+ v.neighbours.uniq.length.should == 1
135
+ end
136
+
137
+ it "finds neighbours with all sorts of edges" do
138
+ v1 = Vertex.new ; v1.id = :v1
139
+ v2 = Vertex.new ; v2.id = :v2
140
+ v3 = Vertex.new ; v3.id = :v3
141
+ v1 << v
142
+ v << v2
143
+ v2 << v3
144
+ v2 << v2
145
+
146
+ v.should have(2).neighbours
147
+ v.neighbours.should include v1
148
+ v.neighbours.should include v2
149
+
150
+ v1.should have(1).neighbours
151
+ v1.neighbours.should include v
152
+
153
+ v2.should have(3).neighbours
154
+ v2.neighbours.should include v
155
+ v2.neighbours.should include v2
156
+ v2.neighbours.should include v3
157
+
158
+ v3.should have(1).neighbours
159
+ v3.neighbours.should include v2
160
+ end
161
+
162
+ it "finds neighbours in graphs with several vertices" do
163
+ v1 = Vertex.new ; v1.id = :v1
164
+ v2 = Vertex.new ; v2.id = :v2
165
+ v3 = Vertex.new ; v3.id = :v3
166
+ v4 = Vertex.new ; v4.id = :v4
167
+ v << v1
168
+ v1 << v2
169
+ v2 << v3
170
+ v << v3
171
+ v4 << v3
172
+ v.should have(2).neighbours
173
+ v.neighbours.should include v1
174
+ v.neighbours.should include v3
175
+ v.neighbours.should_not include v
176
+ v1.should have(2).neighbours
177
+ v1.neighbours.should include v
178
+ v1.neighbours.should include v2
179
+ v1.neighbours.should_not include v1
180
+ v2.should have(2).neighbours
181
+ v2.neighbours.should include v1
182
+ v2.neighbours.should include v3
183
+ v2.neighbours.should_not include v2
184
+ v3.should have(3).neighbours
185
+ v3.neighbours.should include v
186
+ v3.neighbours.should include v2
187
+ v3.neighbours.should include v4
188
+ v3.neighbours.should_not include v3
189
+ v4.should have(1).neighbours
190
+ v4.neighbours.should include v3
191
+ v4.neighbours.should_not include v4
192
+ end
193
+
194
+ it "finds neighbours with multiple edges between vertices" do
195
+ v1 = Vertex.new ; v1.id = :v1
196
+ v2 = Vertex.new ; v2.id = :v2
197
+ v3 = Vertex.new ; v3.id = :v3
198
+ v1 << v1 << v
199
+ v << v2
200
+ v << v
201
+ v3 << v2
202
+ v2 << v3
203
+ v2 << v2
204
+
205
+ v.should have(3).neighbours
206
+ v.neighbours.should include v1
207
+ v.neighbours.should include v2
208
+ v.neighbours.should include v
209
+
210
+ v1.should have(2).neighbours
211
+ v1.neighbours.should include v
212
+ v1.neighbours.should include v1
213
+
214
+ v2.should have(4).neighbours
215
+ v2.neighbours.should include v
216
+ v2.neighbours.should include v2
217
+ v2.neighbours.should include v3
218
+ v2.neighbours.uniq.length.should == 3
219
+
220
+ v3.should have(2).neighbours
221
+ v3.neighbours.should include v2
222
+ v3.neighbours.uniq.length.should == 1
223
+ end
224
+ end # #neighbours
100
225
  end
101
226
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graph.njae
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-09-26 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &73144130 !ruby/object:Gem::Requirement
16
+ requirement: &78709830 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.6.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *73144130
24
+ version_requirements: *78709830
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &73143500 !ruby/object:Gem::Requirement
27
+ requirement: &78708940 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.0.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *73143500
35
+ version_requirements: *78708940
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: jeweler
38
- requirement: &73142380 !ruby/object:Gem::Requirement
38
+ requirement: &78707840 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.6.2
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *73142380
46
+ version_requirements: *78707840
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rcov
49
- requirement: &73141440 !ruby/object:Gem::Requirement
49
+ requirement: &78707190 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *73141440
57
+ version_requirements: *78707190
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rdoc
60
- requirement: &73140590 !ruby/object:Gem::Requirement
60
+ requirement: &78706180 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *73140590
68
+ version_requirements: *78706180
69
69
  description: A simple graph library
70
70
  email: neil.github@njae.me.uk
71
71
  executables: []
@@ -106,7 +106,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
106
106
  version: '0'
107
107
  segments:
108
108
  - 0
109
- hash: -663526449
109
+ hash: 550646159
110
110
  required_rubygems_version: !ruby/object:Gem::Requirement
111
111
  none: false
112
112
  requirements: