rubytree 1.0.2 → 2.0.0
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.
- checksums.yaml +4 -4
- data/API-CHANGES.md +153 -0
- data/Gemfile +2 -6
- data/Gemfile.lock +40 -55
- data/History.md +410 -0
- data/LICENSE.md +1 -1
- data/README.md +21 -24
- data/Rakefile +41 -20
- data/TODO.org +19 -15
- data/examples/example_basic.rb +14 -7
- data/lib/rubytree.rb +2 -3
- data/lib/tree/binarytree.rb +13 -12
- data/lib/tree/tree_deps.rb +2 -5
- data/lib/tree/utils/hash_converter.rb +129 -121
- data/lib/tree/utils/json_converter.rb +80 -77
- data/lib/tree/utils/metrics_methods.rb +14 -47
- data/lib/tree/utils/path_methods.rb +11 -11
- data/lib/tree/utils/tree_merge_handler.rb +80 -80
- data/lib/tree/utils/utils.rb +9 -7
- data/lib/tree/version.rb +3 -4
- data/lib/tree.rb +80 -82
- data/rubytree.gemspec +61 -38
- data/spec/spec_helper.rb +4 -2
- data/spec/tree_spec.rb +129 -28
- data/test/run_test.rb +4 -3
- data/test/test_binarytree.rb +25 -45
- data/test/test_rubytree_require.rb +2 -1
- data/test/test_subclassed_node.rb +2 -20
- data/test/test_thread_and_fiber.rb +4 -4
- data/test/test_tree.rb +126 -199
- metadata +103 -69
- data/API-CHANGES.rdoc +0 -99
- data/History.rdoc +0 -303
- data/lib/tree/utils/camel_case_method_handler.rb +0 -77
- data/setup.rb +0 -1565
data/spec/tree_spec.rb
CHANGED
@@ -3,70 +3,171 @@
|
|
3
3
|
# tree_spec.rb
|
4
4
|
#
|
5
5
|
# Author: Anupam Sengupta
|
6
|
-
# Time-stamp: <
|
7
|
-
# Copyright (C) 2015 Anupam Sengupta <anupamsg@gmail.com>
|
6
|
+
# Time-stamp: <2022-06-20 22:16:11 anupam>
|
7
|
+
# Copyright (C) 2015-2022 Anupam Sengupta <anupamsg@gmail.com>
|
8
8
|
#
|
9
|
+
# frozen_string_literal: true
|
9
10
|
|
10
11
|
require 'rspec'
|
11
12
|
require 'spec_helper'
|
12
13
|
|
14
|
+
class SpecializedTreeNode < Tree::TreeNode; end
|
15
|
+
|
13
16
|
describe Tree do
|
14
17
|
shared_examples_for 'any detached node' do
|
15
|
-
it '
|
16
|
-
expect(
|
18
|
+
it 'does not equal "Object.new"' do
|
19
|
+
expect(tree).not_to eq(Object.new)
|
17
20
|
end
|
18
|
-
|
19
|
-
|
21
|
+
|
22
|
+
it 'does not equal 1 or any other fixnum' do
|
23
|
+
expect(tree).not_to eq(1)
|
20
24
|
end
|
25
|
+
|
21
26
|
it 'identifies itself as a root node' do
|
22
|
-
expect(
|
27
|
+
expect(tree.root?).to be(true)
|
23
28
|
end
|
29
|
+
|
24
30
|
it 'does not have a parent node' do
|
25
|
-
expect(
|
31
|
+
expect(tree.parent).to be_nil
|
26
32
|
end
|
27
33
|
end
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
34
|
+
|
35
|
+
describe '#initialize with empty name and nil content' do
|
36
|
+
let(:tree) { Tree::TreeNode.new('') }
|
37
|
+
|
32
38
|
it 'creates the tree node with name as ""' do
|
33
|
-
expect(
|
39
|
+
expect(tree.name).to eq('')
|
34
40
|
end
|
41
|
+
|
35
42
|
it "has 'nil' content" do
|
36
|
-
expect(
|
43
|
+
expect(tree.content).to be_nil
|
37
44
|
end
|
38
45
|
|
39
46
|
it_behaves_like 'any detached node'
|
40
47
|
end
|
41
48
|
|
42
|
-
|
43
|
-
|
44
|
-
@tree = Tree::TreeNode.new('A')
|
45
|
-
end
|
49
|
+
describe "#initialize with name 'A' and nil content" do
|
50
|
+
let(:tree) { Tree::TreeNode.new('A') }
|
46
51
|
|
47
52
|
it 'creates the tree node with name as "A"' do
|
48
|
-
expect(
|
53
|
+
expect(tree.name).to eq('A')
|
49
54
|
end
|
55
|
+
|
50
56
|
it "has 'nil' content" do
|
51
|
-
expect(
|
57
|
+
expect(tree.content).to be_nil
|
52
58
|
end
|
53
59
|
|
54
60
|
it_behaves_like 'any detached node'
|
55
61
|
end
|
56
62
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
@tree = Tree::TreeNode.new('A', @sample)
|
61
|
-
end
|
63
|
+
describe "#initialize with node name 'A' and some content" do
|
64
|
+
sample = 'some content'
|
65
|
+
let(:tree) { Tree::TreeNode.new('A', sample) }
|
62
66
|
|
63
67
|
it 'creates the tree node with name as "A"' do
|
64
|
-
expect(
|
68
|
+
expect(tree.name).to eq('A')
|
65
69
|
end
|
66
|
-
|
67
|
-
|
70
|
+
|
71
|
+
it "has some content #{sample}" do
|
72
|
+
expect(tree.content).to eq(sample)
|
68
73
|
end
|
69
74
|
|
70
75
|
it_behaves_like 'any detached node'
|
71
76
|
end
|
77
|
+
|
78
|
+
describe 'comparison' do
|
79
|
+
let(:node1) { Tree::TreeNode.new('a') }
|
80
|
+
let(:node2) { SpecializedTreeNode.new('b') }
|
81
|
+
|
82
|
+
it 'allows comparison of specialized tree nodes' do
|
83
|
+
expect(node1 <=> node2).to be_eql(-1)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'does not allow comparison with nil' do
|
87
|
+
expect(node1 <=> nil).to be_nil
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'does not allow comparison with other objects' do
|
91
|
+
expect(node1 <=> 'c').to be_nil
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe 'serialization' do
|
96
|
+
let(:serialized_node1) { Marshal.dump(SpecializedTreeNode.new('a')) }
|
97
|
+
let(:serialized_node2) { Marshal.dump(Tree::TreeNode.new('b')) }
|
98
|
+
let(:tree) do
|
99
|
+
SpecializedTreeNode.new('root').tap do |root|
|
100
|
+
root << SpecializedTreeNode.new('a')
|
101
|
+
root << Tree::TreeNode.new('b')
|
102
|
+
end
|
103
|
+
end
|
104
|
+
let(:serialized_tree) { Marshal.dump(tree) }
|
105
|
+
|
106
|
+
it 'parses the serialized specialized tree node correctly (root)' do
|
107
|
+
expect(Marshal.load(serialized_tree)).to be_a(SpecializedTreeNode)
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'parses the serialized specialized tree node correctly (child)' do
|
111
|
+
expect(Marshal.load(serialized_tree).children.first).to \
|
112
|
+
be_a(SpecializedTreeNode)
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'parses the serialized tree node correctly' do
|
116
|
+
expect(Marshal.load(serialized_node2)).to be_a(Tree::TreeNode)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
shared_examples_for 'any cloned node' do
|
121
|
+
it 'is equal to the original' do
|
122
|
+
expect(clone).to eq tree
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'is not identical to the original' do
|
126
|
+
expect(clone).not_to be tree
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
describe '#detached_copy', 'Without content' do
|
131
|
+
let(:tree) { Tree::TreeNode.new('A', nil) }
|
132
|
+
let(:clone) { tree.detached_copy }
|
133
|
+
|
134
|
+
it_behaves_like 'any cloned node'
|
135
|
+
end
|
136
|
+
|
137
|
+
describe '#detached_copy with clonable content' do
|
138
|
+
let(:tree) { Tree::TreeNode.new('A', 'clonable content') }
|
139
|
+
let(:clone) { tree.detached_copy }
|
140
|
+
|
141
|
+
it 'makes a clone of the content' do
|
142
|
+
expect(clone.content).to eq tree.content
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'is not the same as the original content' do
|
146
|
+
expect(clone.content).not_to be tree.content
|
147
|
+
end
|
148
|
+
|
149
|
+
it_behaves_like 'any cloned node'
|
150
|
+
end
|
151
|
+
|
152
|
+
describe '#detached_copy with unclonable content' do
|
153
|
+
let(:tree) { Tree::TreeNode.new('A', :unclonable_content) }
|
154
|
+
let(:clone) { tree.detached_copy }
|
155
|
+
|
156
|
+
it 'retains the original content' do
|
157
|
+
expect(clone.content).to be tree.content
|
158
|
+
end
|
159
|
+
|
160
|
+
it_behaves_like 'any cloned node'
|
161
|
+
end
|
162
|
+
|
163
|
+
describe '#detached_copy with false as content' do
|
164
|
+
let(:tree) { Tree::TreeNode.new('A', false) }
|
165
|
+
let(:clone) { tree.detached_copy }
|
166
|
+
|
167
|
+
it 'retains the original content' do
|
168
|
+
expect(clone.content).to be tree.content
|
169
|
+
end
|
170
|
+
|
171
|
+
it_behaves_like 'any cloned node'
|
172
|
+
end
|
72
173
|
end
|
data/test/run_test.rb
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
# run_test.rb:: Run all the tests from the Ruby command line.
|
4
4
|
#
|
5
5
|
# Author: Anupam Sengupta
|
6
|
-
# Time-stamp: <
|
7
|
-
# Copyright (C) 2014 Anupam Sengupta <anupamsg@gmail.com>
|
6
|
+
# Time-stamp: <2022-06-19 22:44:56 anupam>
|
7
|
+
# Copyright (C) 2014, 2022 Anupam Sengupta <anupamsg@gmail.com>
|
8
8
|
#
|
9
9
|
# Redistribution and use in source and binary forms, with or without modification,
|
10
10
|
# are permitted provided that the following conditions are met:
|
@@ -31,6 +31,7 @@
|
|
31
31
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
32
32
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
33
33
|
#
|
34
|
+
# frozen_string_literal: true
|
34
35
|
|
35
36
|
base_dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
36
37
|
lib_dir = File.join(base_dir, 'lib')
|
@@ -51,7 +52,7 @@ if ENV['COVERAGE']
|
|
51
52
|
add_group 'Internal Utilities', '/lib/tree/utils/.*.rb'
|
52
53
|
end
|
53
54
|
rescue LoadError => e
|
54
|
-
puts
|
55
|
+
puts "Could not load simplecov; continuing without code coverage #{e.cause}"
|
55
56
|
end
|
56
57
|
end
|
57
58
|
|
data/test/test_binarytree.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# test_binarytree.rb - This file is part of the RubyTree package.
|
4
4
|
#
|
5
5
|
#
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2012, 2013, 2015, 2017 Anupam Sengupta
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2012, 2013, 2015, 2017, 2022 Anupam Sengupta
|
7
7
|
#
|
8
8
|
# All rights reserved.
|
9
9
|
#
|
@@ -32,6 +32,7 @@
|
|
32
32
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
33
33
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
34
34
|
#
|
35
|
+
# frozen_string_literal: true
|
35
36
|
|
36
37
|
require 'test/unit'
|
37
38
|
require_relative '../lib/tree/binarytree'
|
@@ -82,8 +83,8 @@ module TestTree
|
|
82
83
|
|
83
84
|
assert_same(tree.class, Tree::BinaryTreeNode)
|
84
85
|
assert_same(:A, tree.name)
|
85
|
-
assert_equal(true, tree.
|
86
|
-
assert_equal(false, tree.
|
86
|
+
assert_equal(true, tree.root?)
|
87
|
+
assert_equal(false, tree.leaf?)
|
87
88
|
assert_equal(2, tree.children.count) # B, C, D
|
88
89
|
assert_equal(4, tree.size)
|
89
90
|
|
@@ -130,13 +131,13 @@ module TestTree
|
|
130
131
|
# Test the add method.
|
131
132
|
def test_add
|
132
133
|
@root.add @left_child1
|
133
|
-
assert(!@left_child1.
|
134
|
+
assert(!@left_child1.root?, 'Left child1 cannot be a root after addition to the ROOT node')
|
134
135
|
|
135
136
|
assert_same(@left_child1, @root.left_child, 'The left node should be left_child1')
|
136
137
|
assert_same(@left_child1, @root.first_child, 'The first node should be left_child1')
|
137
138
|
|
138
139
|
@root.add @right_child1
|
139
|
-
assert(!@right_child1.
|
140
|
+
assert(!@right_child1.root?, 'Right child1 cannot be a root after addition to the ROOT node')
|
140
141
|
|
141
142
|
assert_same(@right_child1, @root.right_child, 'The right node should be right_child1')
|
142
143
|
assert_same(@right_child1, @root.last_child, 'The first node should be right_child1')
|
@@ -191,9 +192,8 @@ module TestTree
|
|
191
192
|
end
|
192
193
|
|
193
194
|
assert_equal(Enumerator, f.inordered_each.class) if defined?(Enumerator.class) # Without a block
|
194
|
-
|
195
|
-
|
196
|
-
end # Without a block
|
195
|
+
|
196
|
+
assert_equal(Enumerable::Enumerator, f.inordered_each.class) if defined?(Enumerable::Enumerator.class)
|
197
197
|
end
|
198
198
|
|
199
199
|
# Test the left_child method.
|
@@ -217,10 +217,10 @@ module TestTree
|
|
217
217
|
@root << @left_child1
|
218
218
|
@root << @right_child1
|
219
219
|
assert_same(@left_child1, @root.left_child, "The left child should be 'left_child1")
|
220
|
-
assert(!@left_child1.
|
220
|
+
assert(!@left_child1.root?, 'The left child now cannot be a root.')
|
221
221
|
|
222
222
|
@root.left_child = Tree::BinaryTreeNode.new('New Left Child')
|
223
|
-
assert(!@root.left_child.
|
223
|
+
assert(!@root.left_child.root?, 'The left child now cannot be a root.')
|
224
224
|
assert_equal('New Left Child', @root.left_child.name, 'The left child should now be the new child')
|
225
225
|
assert_equal('B Child at Right', @root.last_child.name, 'The last child should now be the right child')
|
226
226
|
|
@@ -236,10 +236,10 @@ module TestTree
|
|
236
236
|
@root << @left_child1
|
237
237
|
@root << @right_child1
|
238
238
|
assert_same(@right_child1, @root.right_child, "The right child should be 'right_child1")
|
239
|
-
assert(!@right_child1.
|
239
|
+
assert(!@right_child1.root?, 'The right child now cannot be a root.')
|
240
240
|
|
241
241
|
@root.right_child = Tree::BinaryTreeNode.new('New Right Child')
|
242
|
-
assert(!@root.right_child.
|
242
|
+
assert(!@root.right_child.root?, 'The right child now cannot be a root.')
|
243
243
|
assert_equal('New Right Child', @root.right_child.name, 'The right child should now be the new child')
|
244
244
|
assert_equal('A Child at Left', @root.first_child.name, 'The first child should now be the left child')
|
245
245
|
assert_equal('New Right Child', @root.last_child.name, 'The last child should now be the right child')
|
@@ -256,28 +256,28 @@ module TestTree
|
|
256
256
|
@root << @left_child1
|
257
257
|
@root << @right_child1
|
258
258
|
|
259
|
-
assert(@left_child1.
|
260
|
-
assert(!@right_child1.
|
259
|
+
assert(@left_child1.left_child?, 'left_child1 should be the left child')
|
260
|
+
assert(!@right_child1.left_child?, 'left_child1 should be the left child')
|
261
261
|
|
262
262
|
# Now set the right child as nil, and retest
|
263
263
|
@root.right_child = nil
|
264
|
-
assert(@left_child1.
|
264
|
+
assert(@left_child1.left_child?, 'left_child1 should be the left child')
|
265
265
|
|
266
|
-
assert(!@root.
|
266
|
+
assert(!@root.left_child?, 'Root is neither left child nor right')
|
267
267
|
end
|
268
268
|
|
269
|
-
# Test
|
269
|
+
# Test right_child? method.
|
270
270
|
def test_is_right_child_eh
|
271
271
|
@root << @left_child1
|
272
272
|
@root << @right_child1
|
273
273
|
|
274
|
-
assert(@right_child1.
|
275
|
-
assert(!@left_child1.
|
274
|
+
assert(@right_child1.right_child?, 'right_child1 should be the right child')
|
275
|
+
assert(!@left_child1.right_child?, 'right_child1 should be the right child')
|
276
276
|
|
277
277
|
# Now set the left child as nil, and retest
|
278
278
|
@root.left_child = nil
|
279
|
-
assert(@right_child1.
|
280
|
-
assert(!@root.
|
279
|
+
assert(@right_child1.right_child?, 'right_child1 should be the right child')
|
280
|
+
assert(!@root.right_child?, 'Root is neither left child nor right')
|
281
281
|
end
|
282
282
|
|
283
283
|
# Test swap_children method.
|
@@ -285,37 +285,17 @@ module TestTree
|
|
285
285
|
@root << @left_child1
|
286
286
|
@root << @right_child1
|
287
287
|
|
288
|
-
assert(@right_child1.
|
289
|
-
assert(!@left_child1.
|
288
|
+
assert(@right_child1.right_child?, 'right_child1 should be the right child')
|
289
|
+
assert(!@left_child1.right_child?, 'right_child1 should be the right child')
|
290
290
|
|
291
291
|
@root.swap_children
|
292
292
|
|
293
|
-
assert(@right_child1.
|
294
|
-
assert(@left_child1.
|
293
|
+
assert(@right_child1.left_child?, 'right_child1 should now be the left child')
|
294
|
+
assert(@left_child1.right_child?, 'left_child1 should now be the right child')
|
295
295
|
assert_equal(@right_child1, @root.first_child, 'right_child1 should now be the first child')
|
296
296
|
assert_equal(@left_child1, @root.last_child, 'left_child1 should now be the last child')
|
297
297
|
assert_equal(@right_child1, @root[0], 'right_child1 should now be the first child')
|
298
298
|
assert_equal(@left_child1, @root[1], 'left_child1 should now be the last child')
|
299
299
|
end
|
300
|
-
|
301
|
-
# Test the old CamelCase method names
|
302
|
-
def test_old_camel_case_names
|
303
|
-
@left_child2 = Tree::BinaryTreeNode.new('A Child at Left', 'Child Node @ left')
|
304
|
-
@right_child2 = Tree::BinaryTreeNode.new('B Child at Right', 'Child Node @ right')
|
305
|
-
|
306
|
-
require 'structured_warnings'
|
307
|
-
|
308
|
-
meth_names_for_test = %w[leftChild isLeftChild? rightChild isRightChild?]
|
309
|
-
|
310
|
-
meth_names_for_test.each do |meth_name|
|
311
|
-
assert_warn(StructuredWarnings::DeprecatedMethodWarning) { @root.send(meth_name) }
|
312
|
-
end
|
313
|
-
|
314
|
-
# noinspection RubyResolve
|
315
|
-
assert_warn(StructuredWarnings::DeprecatedMethodWarning) { @root.leftChild = @left_child2 }
|
316
|
-
# noinspection RubyResolve
|
317
|
-
assert_warn(StructuredWarnings::DeprecatedMethodWarning) { @root.rightChild = @right_child2 }
|
318
|
-
assert_raise(NoMethodError) { @root.DummyMethodDoesNotExist } # Make sure the right method is visible
|
319
|
-
end
|
320
300
|
end
|
321
301
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# test_rubytree_require.rb - This file is part of the RubyTree package.
|
4
4
|
#
|
5
|
-
# Copyright (c) 2012 Anupam Sengupta
|
5
|
+
# Copyright (c) 2012, 2022 Anupam Sengupta
|
6
6
|
#
|
7
7
|
# All rights reserved.
|
8
8
|
#
|
@@ -31,6 +31,7 @@
|
|
31
31
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
32
32
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
33
33
|
#
|
34
|
+
# frozen_string_literal: true
|
34
35
|
|
35
36
|
require 'test/unit'
|
36
37
|
require_relative '../lib/rubytree'
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# test_subclassed_node.rb - This file is part of the RubyTree package.
|
4
4
|
#
|
5
|
-
# Copyright (c) 2012, 2017 Anupam Sengupta
|
5
|
+
# Copyright (c) 2012, 2017, 2022 Anupam Sengupta
|
6
6
|
#
|
7
7
|
# All rights reserved.
|
8
8
|
#
|
@@ -31,6 +31,7 @@
|
|
31
31
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
32
32
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
33
33
|
#
|
34
|
+
# frozen_string_literal: true
|
34
35
|
|
35
36
|
require 'test/unit'
|
36
37
|
require 'json'
|
@@ -41,25 +42,6 @@ module TestTree
|
|
41
42
|
class TestSubclassedTreeNode < Test::Unit::TestCase
|
42
43
|
# A subclassed node to test various inheritance related features.
|
43
44
|
class MyNode < Tree::TreeNode
|
44
|
-
# A dummy method to test the camelCasedMethod resolution
|
45
|
-
def my_dummy_method
|
46
|
-
'Hello'
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_camelcase_methods
|
51
|
-
root = MyNode.new('Root')
|
52
|
-
|
53
|
-
assert_equal('Hello', root.my_dummy_method)
|
54
|
-
|
55
|
-
# We should get a warning as we are invoking the camelCase version of the dummy method.
|
56
|
-
assert_warn(StructuredWarnings::DeprecatedMethodWarning) { root.send('MyDummyMethod') }
|
57
|
-
|
58
|
-
# Test if the structured_warnings can be disabled to call the CamelCase methods.
|
59
|
-
StructuredWarnings::DeprecatedMethodWarning.disable do
|
60
|
-
# noinspection RubyResolve
|
61
|
-
assert_equal('Hello', root.myDummyMethod)
|
62
|
-
end
|
63
45
|
end
|
64
46
|
|
65
47
|
def test_detached_copy_same_clz
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# test_thread_and_fiber.rb - This file is part of the RubyTree package.
|
4
4
|
#
|
5
|
-
# Copyright (c) 2012, 2013 Anupam Sengupta
|
5
|
+
# Copyright (c) 2012, 2013, 2022 Anupam Sengupta
|
6
6
|
#
|
7
7
|
# All rights reserved.
|
8
8
|
#
|
@@ -31,6 +31,7 @@
|
|
31
31
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
32
32
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
33
33
|
#
|
34
|
+
# frozen_string_literal: true
|
34
35
|
|
35
36
|
require 'test/unit'
|
36
37
|
require 'json'
|
@@ -49,7 +50,6 @@ module TestTree
|
|
49
50
|
current = new_node
|
50
51
|
end
|
51
52
|
|
52
|
-
tree.each { |_| nil }
|
53
53
|
tree
|
54
54
|
end
|
55
55
|
|
@@ -65,7 +65,7 @@ module TestTree
|
|
65
65
|
assert_equal(depth + 1, root.size)
|
66
66
|
end.resume
|
67
67
|
end
|
68
|
-
end
|
68
|
+
end
|
69
69
|
|
70
70
|
# Test the recursive methods with a thread. The stack usage is causing
|
71
71
|
# failure for very large depths on unbalanced nodes.
|
@@ -78,7 +78,7 @@ module TestTree
|
|
78
78
|
assert_equal(depth + 1, root.size)
|
79
79
|
end
|
80
80
|
end
|
81
|
-
end
|
81
|
+
end
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|