compsci 0.0.3.1 → 0.1.0.1

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.
@@ -3,69 +3,6 @@ require 'minitest/autorun'
3
3
 
4
4
  include CompSci
5
5
 
6
- describe Node do
7
- before do
8
- @martin_sheen = Node.new 'martin'
9
- @charlie_sheen = Node.new 'charlie'
10
- @emilio_estevez = Node.new 'emilio'
11
- end
12
-
13
- it "must start with no children" do
14
- [@martin_sheen, @charlie_sheen, @emilio_estevez].each { |n|
15
- n.children.must_be_empty
16
- }
17
- end
18
-
19
- it "must track children" do
20
- @charlie_sheen.add_parent(@martin_sheen)
21
- @martin_sheen.children.must_include @charlie_sheen
22
-
23
- @martin_sheen.children.wont_include @emilio_estevez
24
- @martin_sheen.add_child @emilio_estevez
25
- @martin_sheen.children.must_include @emilio_estevez
26
- end
27
-
28
- it "must create children from scalars" do
29
- @martin_sheen.new_child 'fake_emilio'
30
- @martin_sheen.children.size.must_equal 1
31
- @martin_sheen.children.first.value.must_equal 'fake_emilio'
32
- @martin_sheen.children.wont_include @emilio_estevez
33
- end
34
- end
35
-
36
- describe ChildNode do
37
- before do
38
- @martin_sheen = ChildNode.new 'martin'
39
- @charlie_sheen = ChildNode.new 'charlie'
40
- @emilio_estevez = ChildNode.new 'emilio'
41
- end
42
-
43
- it "must start with neither parent nor children" do
44
- [@martin_sheen, @charlie_sheen, @emilio_estevez].each { |n|
45
- n.parent.nil?.must_equal true
46
- n.children.must_be_empty
47
- }
48
- end
49
-
50
- it "must track parent and children" do
51
- @charlie_sheen.add_parent(@martin_sheen)
52
- @charlie_sheen.parent.must_equal @martin_sheen
53
- @martin_sheen.children.must_include @charlie_sheen
54
-
55
- @martin_sheen.children.wont_include @emilio_estevez
56
- @martin_sheen.add_child @emilio_estevez
57
- @martin_sheen.children.must_include @emilio_estevez
58
- @emilio_estevez.parent.must_equal @martin_sheen
59
- end
60
-
61
- it "must create children from scalars" do
62
- @martin_sheen.new_child 'fake_emilio'
63
- @martin_sheen.children.size.must_equal 1
64
- @martin_sheen.children.first.value.must_equal 'fake_emilio'
65
- @martin_sheen.children.wont_include @emilio_estevez
66
- end
67
- end
68
-
69
6
  describe Tree do
70
7
  before do
71
8
  @tree = Tree.new(Node, 42)
@@ -127,25 +64,64 @@ describe Tree do
127
64
  end
128
65
 
129
66
  describe NaryTree do
67
+ describe "with Node" do
68
+ before do
69
+ @tree = NaryTree.new(Node, 42, child_slots: 3)
70
+ end
71
+
72
+ it "must have an open parent" do
73
+ @tree.open_parent?(@tree.root).must_equal true
74
+ @tree.open_parent?(@tree.open_parent).must_equal true
75
+ end
76
+
77
+ it "must push a value onto an open parent" do
78
+ op = @tree.open_parent
79
+ opc = op.children.size
80
+ @tree.push 5
81
+ @tree.open_parent.children.size.must_equal opc + 1
82
+ end
83
+ end
84
+
85
+ describe "with ChildNode" do
86
+ before do
87
+ @tree = NaryTree.new(ChildNode, 42, child_slots: 4)
88
+ end
89
+
90
+ it "must have an open parent" do
91
+ @tree.open_parent?(@tree.root).must_equal true
92
+ @tree.open_parent?(@tree.open_parent).must_equal true
93
+ end
94
+
95
+ it "must push a value onto an open parent" do
96
+ op = @tree.open_parent
97
+ opc = op.children.size
98
+ @tree.push 5
99
+ @tree.open_parent.children.size.must_equal opc + 1
100
+ end
101
+ end
102
+ end
103
+
104
+ describe "BinaryTree" do
130
105
  before do
131
- @tree = NaryTree.new(ChildNode, 42, child_slots: 3)
106
+ @tree = BinaryTree.new(Node, 42)
132
107
  end
133
108
 
134
- it "must have an open parent" do
135
- @tree.open_parent?(@tree.root).must_equal true
136
- @tree.open_parent?(@tree.open_parent).must_equal true
109
+ it "must have 2 child_slots" do
110
+ @tree.child_slots.must_equal 2
137
111
  end
138
112
 
139
- it "must push a value onto an open parent" do
140
- op = @tree.open_parent
141
- opc = op.children.size
142
- @tree.push 5
143
- @tree.open_parent.children.size.must_equal opc + 1
113
+ it "must to_s" do
114
+ item_count = 31
115
+ # tree already has a root node
116
+ (item_count - 1).times { @tree.push rand 99 }
117
+ str = @tree.to_s
118
+ line_count = str.split("\n").size
119
+ line_count.must_equal Math.log(item_count + 1, 2).ceil
144
120
  end
145
121
 
146
122
  describe "searching" do
147
123
  before do
148
- @tree = NaryTree.new(ChildNode, 42, child_slots: 2)
124
+ @tree = NaryTree.new(Node, 42, child_slots: 2)
149
125
  99.times { |i| @tree.push i }
150
126
  end
151
127
 
@@ -198,167 +174,3 @@ describe NaryTree do
198
174
  end
199
175
  end
200
176
  end
201
-
202
- describe BinaryTree do
203
- before do
204
- @tree = BinaryTree.new(ChildNode, 42)
205
- end
206
-
207
- it "must have 2 child_slots" do
208
- @tree.child_slots.must_equal 2
209
- end
210
-
211
- it "must to_s" do
212
- item_count = 31
213
- # tree already has a root node
214
- (item_count - 1).times { @tree.push rand 99 }
215
- str = @tree.to_s
216
- line_count = str.split("\n").size
217
- line_count.must_equal Math.log(item_count + 1, 2).ceil
218
- end
219
- end
220
-
221
- describe CompleteBinaryTree do
222
- it "must calculate a parent index" do
223
- valid = {
224
- 1 => 0,
225
- 2 => 0,
226
- 3 => 1,
227
- 4 => 1,
228
- 5 => 2,
229
- 6 => 2,
230
- 7 => 3,
231
- 8 => 3,
232
- 9 => 4,
233
- 10 => 4,
234
- }
235
-
236
- invalid = {
237
- 0 => -1,
238
- -1 => -1,
239
- -2 => -2,
240
- }
241
- valid.each { |idx, pidx|
242
- CompleteBinaryTree.parent_idx(idx).must_equal pidx
243
- }
244
- invalid.each { |idx, pidx|
245
- CompleteBinaryTree.parent_idx(idx).must_equal pidx
246
- }
247
- end
248
-
249
- it "must calculate children indices" do
250
- valid = {
251
- 0 => [1, 2],
252
- 1 => [3, 4],
253
- 2 => [5, 6],
254
- 3 => [7, 8],
255
- 4 => [9, 10],
256
- 5 => [11, 12],
257
- 6 => [13, 14],
258
- 7 => [15, 16],
259
- 8 => [17, 18],
260
- 9 => [19, 20],
261
- 10 => [21, 22],
262
- }
263
-
264
- invalid = {
265
- -3 => [-5, -4],
266
- -2 => [-3, -2],
267
- -1 => [-1, 0],
268
- }
269
-
270
- valid.each { |idx, cidx|
271
- CompleteBinaryTree.children_idx(idx).must_equal cidx
272
- }
273
- invalid.each { |idx, cidx|
274
- CompleteBinaryTree.children_idx(idx).must_equal cidx
275
- }
276
- end
277
-
278
- describe "instance" do
279
- before do
280
- @array = (0..99).sort_by { rand }
281
- @empty = CompleteBinaryTree.new
282
- @nonempty = CompleteBinaryTree.new(store: @array)
283
- end
284
-
285
- it "must have a size" do
286
- @empty.size.must_equal 0
287
- @nonempty.size.must_equal @array.size
288
- end
289
-
290
- it "must have a last_idx, nil when empty" do
291
- @empty.last_idx.nil?.must_equal true
292
- @nonempty.last_idx.must_equal 99
293
- end
294
- end
295
- end
296
-
297
- describe CompleteNaryTree do
298
- it "must calculate a parent index for N=3" do
299
- valid = {
300
- 1 => 0,
301
- 2 => 0,
302
- 3 => 0,
303
- 4 => 1,
304
- 5 => 1,
305
- 6 => 1,
306
- 7 => 2,
307
- 8 => 2,
308
- 9 => 2,
309
- 10 => 3,
310
- }
311
-
312
- invalid = {
313
- 0 => -1,
314
- -1 => -1,
315
- -2 => -1,
316
- }
317
- valid.each { |idx, pidx|
318
- CompleteNaryTree.parent_idx(idx, 3).must_equal pidx
319
- }
320
- invalid.each { |idx, pidx|
321
- CompleteNaryTree.parent_idx(idx, 3).must_equal pidx
322
- }
323
- end
324
-
325
- it "must calculate children indices for N=3" do
326
- valid = {
327
- 0 => [1, 2, 3],
328
- 1 => [4, 5, 6],
329
- 2 => [7, 8, 9],
330
- 3 => [10, 11, 12],
331
- }
332
-
333
- invalid = {
334
- -3 => [-8, -7, -6],
335
- -2 => [-5, -4, -3],
336
- -1 => [-2, -1, 0],
337
- }
338
-
339
- valid.each { |idx, cidx|
340
- CompleteNaryTree.children_idx(idx, 3).must_equal cidx
341
- }
342
- invalid.each { |idx, cidx|
343
- CompleteNaryTree.children_idx(idx, 3).must_equal cidx
344
- }
345
- end
346
-
347
- describe "instance" do
348
- before do
349
- @array = (0..99).sort_by { rand }
350
- @empty = CompleteNaryTree.new(child_slots: 5)
351
- @nonempty = CompleteNaryTree.new(store: @array, child_slots: 3)
352
- end
353
-
354
- it "must have a size" do
355
- @empty.size.must_equal 0
356
- @nonempty.size.must_equal @array.size
357
- end
358
-
359
- it "must have a last_idx, nil when empty" do
360
- @empty.last_idx.nil?.must_equal true
361
- @nonempty.last_idx.must_equal 99
362
- end
363
- end
364
- end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: compsci
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3.1
4
+ version: 0.1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rick Hull
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-27 00:00:00.000000000 Z
11
+ date: 2017-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '5.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description: Trees, Heaps, Timers, Error fitting, etc
28
42
  email:
29
43
  executables: []
@@ -35,19 +49,27 @@ files:
35
49
  - VERSION
36
50
  - compsci.gemspec
37
51
  - examples/binary_tree.rb
52
+ - examples/complete_tree.rb
38
53
  - examples/heap.rb
54
+ - examples/tree.rb
39
55
  - lib/compsci.rb
56
+ - lib/compsci/complete_tree.rb
40
57
  - lib/compsci/fibonacci.rb
41
58
  - lib/compsci/fit.rb
42
59
  - lib/compsci/heap.rb
60
+ - lib/compsci/names.rb
61
+ - lib/compsci/node.rb
43
62
  - lib/compsci/timer.rb
44
63
  - lib/compsci/tree.rb
45
64
  - test/bench/fibonacci.rb
46
65
  - test/bench/heap.rb
47
66
  - test/bench/tree.rb
67
+ - test/complete_tree.rb
48
68
  - test/fibonacci.rb
49
69
  - test/fit.rb
50
70
  - test/heap.rb
71
+ - test/names.rb
72
+ - test/node.rb
51
73
  - test/timer.rb
52
74
  - test/tree.rb
53
75
  homepage: https://github.com/rickhull/compsci