rubytree 0.4.2 → 0.5.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.
- data/ChangeLog +35 -0
- data/History.txt +11 -0
- data/Manifest.txt +12 -0
- data/README +11 -19
- data/Rakefile +102 -43
- data/TODO +1 -0
- data/lib/tree.rb +54 -42
- data/lib/tree/binarytree.rb +5 -2
- data/setup.rb +1585 -0
- data/test/test_binarytree.rb +5 -2
- data/test/test_tree.rb +53 -20
- metadata +62 -50
- data/TAGS +0 -120
data/test/test_binarytree.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
#
|
3
|
+
# test_binarytree.rb
|
4
4
|
#
|
5
|
-
# $Revision: 1.
|
5
|
+
# $Revision: 1.4 $ by $Author: anupamsg $
|
6
6
|
# $Name: $
|
7
7
|
#
|
8
8
|
# Copyright (c) 2006, 2007 Anupam Sengupta
|
@@ -170,6 +170,9 @@ class TC_BinaryTreeTest < Test::Unit::TestCase
|
|
170
170
|
end
|
171
171
|
|
172
172
|
# $Log: test_binarytree.rb,v $
|
173
|
+
# Revision 1.4 2007/12/18 23:11:29 anupamsg
|
174
|
+
# Minor documentation changes in the binarytree class.
|
175
|
+
#
|
173
176
|
# Revision 1.3 2007/10/02 03:07:30 anupamsg
|
174
177
|
# * Rakefile: Added an optional task for rcov code coverage.
|
175
178
|
#
|
data/test/test_tree.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# testtree.rb
|
4
4
|
#
|
5
|
-
# $Revision: 1.
|
5
|
+
# $Revision: 1.5 $ by $Author: anupamsg $
|
6
6
|
# $Name: $
|
7
7
|
#
|
8
8
|
# Copyright (c) 2006, 2007 Anupam Sengupta
|
@@ -426,19 +426,48 @@ class TC_TreeTest < Test::Unit::TestCase
|
|
426
426
|
#@root.printTree
|
427
427
|
end
|
428
428
|
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
429
|
+
# Tests the binary dumping mechanism with an Object content node
|
430
|
+
def test_marshalling
|
431
|
+
# Setup Test Data
|
432
|
+
test_root = Tree::TreeNode.new("ROOT", "Root Node")
|
433
|
+
test_content = {"KEY1" => "Value1", "KEY2" => "Value2" }
|
434
|
+
test_child = Tree::TreeNode.new("Child", test_content)
|
435
|
+
test_content2 = ["AValue1", "AValue2", "AValue3"]
|
436
|
+
test_grand_child = Tree::TreeNode.new("Grand Child 1", test_content2)
|
437
|
+
test_root << test_child << test_grand_child
|
438
|
+
|
439
|
+
# Perform the test operation
|
440
|
+
data = Marshal.dump(test_root) # Marshal
|
441
|
+
new_root = Marshal.load(data) # And unmarshal
|
442
|
+
|
443
|
+
# Test the root node
|
444
|
+
assert_equal(test_root.name, new_root.name, "Must identify as ROOT")
|
445
|
+
assert_equal(test_root.content, new_root.content, "Must have root's content")
|
446
|
+
assert(new_root.isRoot?, "Must be the ROOT node")
|
447
|
+
assert(new_root.hasChildren?, "Must have a child node")
|
448
|
+
|
449
|
+
# Test the child node
|
450
|
+
new_child = new_root[test_child.name]
|
451
|
+
assert_equal(test_child.name, new_child.name, "Must have child 1")
|
452
|
+
assert(new_child.hasContent?, "Child must have content")
|
453
|
+
assert(new_child.isOnlyChild?, "Child must be the only child")
|
454
|
+
|
455
|
+
new_child_content = new_child.content
|
456
|
+
assert_equal(Hash, new_child_content.class, "Class of child's content should be a hash")
|
457
|
+
assert_equal(test_child.content.size, new_child_content.size, "The content should have same size")
|
458
|
+
|
459
|
+
# Test the grand-child node
|
460
|
+
new_grand_child = new_child[test_grand_child.name]
|
461
|
+
assert_equal(test_grand_child.name, new_grand_child.name, "Must have grand child")
|
462
|
+
assert(new_grand_child.hasContent?, "Grand-child must have content")
|
463
|
+
assert(new_grand_child.isOnlyChild?, "Grand-child must be the only child")
|
464
|
+
|
465
|
+
new_grand_child_content = new_grand_child.content
|
466
|
+
assert_equal(Array, new_grand_child_content.class, "Class of grand-child's content should be an Array")
|
467
|
+
assert_equal(test_grand_child.content.size, new_grand_child_content.size, "The content should have same size")
|
468
|
+
end
|
469
|
+
|
470
|
+
# Test the collect method from the mixed-in Enumerable functionality.
|
442
471
|
def test_collect
|
443
472
|
loadChildren
|
444
473
|
collectArray = @root.collect do |node|
|
@@ -448,6 +477,7 @@ class TC_TreeTest < Test::Unit::TestCase
|
|
448
477
|
collectArray.each {|node| assert_equal("abc", node.content, "Should be 'abc'")}
|
449
478
|
end
|
450
479
|
|
480
|
+
# Test freezing the tree
|
451
481
|
def test_freezeTree
|
452
482
|
loadChildren
|
453
483
|
@root.content = "ABC"
|
@@ -457,12 +487,14 @@ class TC_TreeTest < Test::Unit::TestCase
|
|
457
487
|
assert_raise(TypeError) {@root[0].content = "123"}
|
458
488
|
end
|
459
489
|
|
490
|
+
# Test whether the content is accesible
|
460
491
|
def test_content
|
461
492
|
pers = Person::new("John", "Doe")
|
462
493
|
@root.content = pers
|
463
494
|
assert_same(pers, @root.content, "Content should be the same")
|
464
495
|
end
|
465
496
|
|
497
|
+
# Test the depth computation algorithm
|
466
498
|
def test_depth
|
467
499
|
assert_equal(1, @root.depth, "A single node's depth is 1")
|
468
500
|
|
@@ -478,9 +510,9 @@ class TC_TreeTest < Test::Unit::TestCase
|
|
478
510
|
|
479
511
|
@child3 << @child4
|
480
512
|
assert_equal(4, @root.depth, "This should be of depth 4")
|
481
|
-
|
482
513
|
end
|
483
514
|
|
515
|
+
# Test the breadth computation algorithm
|
484
516
|
def test_breadth
|
485
517
|
assert_equal(1, @root.breadth, "A single node's breadth is 1")
|
486
518
|
|
@@ -499,6 +531,7 @@ class TC_TreeTest < Test::Unit::TestCase
|
|
499
531
|
assert_equal(1, @child4.breadth, "This should be of breadth 1")
|
500
532
|
end
|
501
533
|
|
534
|
+
# Test the breadth for each
|
502
535
|
def test_breadth_each
|
503
536
|
j = Tree::TreeNode.new("j")
|
504
537
|
f = Tree::TreeNode.new("f")
|
@@ -526,16 +559,13 @@ class TC_TreeTest < Test::Unit::TestCase
|
|
526
559
|
f << h
|
527
560
|
j << k << z
|
528
561
|
|
529
|
-
result_array = []
|
530
|
-
|
531
562
|
# Create the response
|
563
|
+
result_array = Array.new
|
532
564
|
j.breadth_each { |node| result_array << node.detached_copy }
|
533
565
|
|
534
566
|
expected_array.each_index do |i|
|
535
|
-
# Match only the names.
|
536
|
-
assert_equal(expected_array[i].name, result_array[i].name)
|
567
|
+
assert_equal(expected_array[i].name, result_array[i].name) # Match only the names.
|
537
568
|
end
|
538
|
-
|
539
569
|
end
|
540
570
|
|
541
571
|
|
@@ -593,6 +623,9 @@ end
|
|
593
623
|
__END__
|
594
624
|
|
595
625
|
# $Log: test_tree.rb,v $
|
626
|
+
# Revision 1.5 2007/12/19 02:24:18 anupamsg
|
627
|
+
# Updated the marshalling logic to handle non-string contents on the nodes.
|
628
|
+
#
|
596
629
|
# Revision 1.4 2007/10/02 03:38:11 anupamsg
|
597
630
|
# Removed dependency on the redundant "Person" class.
|
598
631
|
# (TC_TreeTest::test_comparator): Added a new test for the spaceship operator.
|
metadata
CHANGED
@@ -1,65 +1,77 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: rubytree
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-10-01 00:00:00 -07:00
|
8
|
-
summary: Ruby implementation of the Tree data structure.
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: anupamsg@gmail.com
|
12
|
-
homepage: http://rubytree.rubyforge.org/
|
13
|
-
rubyforge_project: rubytree
|
14
|
-
description: "Provides a generic tree data-structure with ability to store keyed node-elements in the tree. The implementation mixes in the Enumerable module. Website: http://rubytree.rubyforge.org/"
|
15
|
-
autorequire: tree
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.5.0
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Anupam Sengupta
|
31
|
-
|
8
|
+
autorequire: tree
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2007-12-19 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: hoe
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.3.0
|
23
|
+
version:
|
24
|
+
description: "Provides a generic tree data-structure with ability to store keyed node-elements in the tree. The implementation mixes in the Enumerable module. Website: http://rubytree.rubyforge.org/"
|
25
|
+
email: anupamsg@gmail.com
|
26
|
+
executables: []
|
27
|
+
|
28
|
+
extensions: []
|
29
|
+
|
30
|
+
extra_rdoc_files:
|
31
|
+
- README
|
32
|
+
- COPYING
|
32
33
|
- ChangeLog
|
34
|
+
- History.txt
|
35
|
+
files:
|
33
36
|
- COPYING
|
34
|
-
-
|
37
|
+
- ChangeLog
|
38
|
+
- History.txt
|
39
|
+
- Manifest.txt
|
35
40
|
- README
|
36
|
-
-
|
37
|
-
-
|
41
|
+
- TODO
|
42
|
+
- Rakefile
|
38
43
|
- lib/tree.rb
|
44
|
+
- lib/tree/binarytree.rb
|
45
|
+
- setup.rb
|
39
46
|
- test/test_binarytree.rb
|
40
47
|
- test/test_tree.rb
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
rdoc_options:
|
45
|
-
|
46
|
-
extra_rdoc_files:
|
48
|
+
has_rdoc: true
|
49
|
+
homepage: http://rubytree.rubyforge.org/
|
50
|
+
post_install_message:
|
51
|
+
rdoc_options:
|
52
|
+
- --main
|
47
53
|
- README
|
48
|
-
|
49
|
-
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: "0"
|
61
|
+
version:
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
67
|
+
version:
|
54
68
|
requirements: []
|
55
69
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
version: 0.7.2
|
65
|
-
version:
|
70
|
+
rubyforge_project: rubytree
|
71
|
+
rubygems_version: 0.9.5
|
72
|
+
signing_key:
|
73
|
+
specification_version: 2
|
74
|
+
summary: Ruby implementation of the Tree data structure.
|
75
|
+
test_files:
|
76
|
+
- test/test_binarytree.rb
|
77
|
+
- test/test_tree.rb
|
data/TAGS
DELETED
@@ -1,120 +0,0 @@
|
|
1
|
-
|
2
|
-
lib/tree/binarytree.rb,572
|
3
|
-
module Tree::Tree47,1886
|
4
|
-
class BinaryTreeNode::Tree::BinaryTreeNode52,2117
|
5
|
-
def add::Tree::BinaryTreeNode#add59,2502
|
6
|
-
def leftChild::Tree::BinaryTreeNode#leftChild67,2705
|
7
|
-
def rightChild::Tree::BinaryTreeNode#rightChild74,2917
|
8
|
-
def leftChild=::Tree::BinaryTreeNode#leftChild=79,3021
|
9
|
-
def rightChild=::Tree::BinaryTreeNode#rightChild=85,3231
|
10
|
-
def isLeftChild?::Tree::BinaryTreeNode#isLeftChild?92,3498
|
11
|
-
def isRightChild?::Tree::BinaryTreeNode#isRightChild?99,3702
|
12
|
-
def swap_children::Tree::BinaryTreeNode#swap_children105,3831
|
13
|
-
|
14
|
-
lib/tree.rb,2700
|
15
|
-
module Tree::Tree48,2030
|
16
|
-
class TreeNode::Tree::TreeNode105,3833
|
17
|
-
attr_reader :content, :name, :parent::Tree::TreeNode#content108,3876
|
18
|
-
attr_reader :content, :name, :parent::Tree::TreeNode#name108,3876
|
19
|
-
attr_reader :content, :name, :parent::Tree::TreeNode#parent108,3876
|
20
|
-
attr_writer :content::Tree::TreeNode#content109,3917
|
21
|
-
def initialize::Tree::TreeNode#Tree::TreeNode.new120,4189
|
22
|
-
def detached_copy::Tree::TreeNode#detached_copy134,4514
|
23
|
-
def to_s::Tree::TreeNode#to_s139,4653
|
24
|
-
def parentage::Tree::TreeNode#parentage151,5042
|
25
|
-
def parent=::Tree::TreeNode#parent=166,5378
|
26
|
-
def <<::Tree::TreeNode#<<174,5618
|
27
|
-
def add::Tree::TreeNode#add181,5877
|
28
|
-
def remove!::Tree::TreeNode#remove!196,6290
|
29
|
-
def removeFromParent!::Tree::TreeNode#removeFromParent!205,6566
|
30
|
-
def removeAll!::Tree::TreeNode#removeAll!210,6688
|
31
|
-
def hasContent?::Tree::TreeNode#hasContent?220,6902
|
32
|
-
def setAsRoot!::Tree::TreeNode#setAsRoot!225,7010
|
33
|
-
def isRoot?::Tree::TreeNode#isRoot?231,7176
|
34
|
-
def hasChildren?::Tree::TreeNode#hasChildren?236,7292
|
35
|
-
def isLeaf?::Tree::TreeNode#isLeaf?242,7430
|
36
|
-
def children::Tree::TreeNode#children248,7595
|
37
|
-
def firstChild::Tree::TreeNode#firstChild258,7823
|
38
|
-
def lastChild::Tree::TreeNode#lastChild264,7964
|
39
|
-
def each::Tree::TreeNode#each271,8188
|
40
|
-
def preordered_each::Tree::TreeNode#preordered_each278,8385
|
41
|
-
def breadth_each::Tree::TreeNode#breadth_each284,8572
|
42
|
-
def each_leaf::Tree::TreeNode#each_leaf299,9143
|
43
|
-
def []::Tree::TreeNode#[]308,9521
|
44
|
-
def size::Tree::TreeNode#size320,9859
|
45
|
-
def length::Tree::TreeNode#length325,9979
|
46
|
-
def printTree::Tree::TreeNode#printTree330,10068
|
47
|
-
def root::Tree::TreeNode#root348,10495
|
48
|
-
def firstSibling::Tree::TreeNode#firstSibling356,10694
|
49
|
-
def isFirstSibling?::Tree::TreeNode#isFirstSibling?365,10862
|
50
|
-
def lastSibling::Tree::TreeNode#lastSibling371,11013
|
51
|
-
def isLastSibling?::Tree::TreeNode#isLastSibling?380,11176
|
52
|
-
def siblings::Tree::TreeNode#siblings387,11395
|
53
|
-
def isOnlyChild?::Tree::TreeNode#isOnlyChild?401,11768
|
54
|
-
def nextSibling::Tree::TreeNode#nextSibling407,11931
|
55
|
-
def previousSibling::Tree::TreeNode#previousSibling415,12163
|
56
|
-
def <=>::Tree::TreeNode#<=>424,12428
|
57
|
-
def freezeTree!::Tree::TreeNode#freezeTree!430,12570
|
58
|
-
def createDumpRep::Tree::TreeNode#createDumpRep435,12702
|
59
|
-
def _dump::Tree::TreeNode#_dump441,12882
|
60
|
-
def TreeNode.loadDumpRep::Tree::TreeNode.loadDumpRep448,13072
|
61
|
-
def TreeNode._load::Tree::TreeNode._load466,13649
|
62
|
-
def depth::Tree::TreeNode#depth472,13809
|
63
|
-
def breadth::Tree::TreeNode#breadth479,14010
|
64
|
-
|
65
|
-
test/test_binarytree.rb,750
|
66
|
-
class TC_BinaryTreeTest::TC_BinaryTreeTest42,1721
|
67
|
-
def setup::TC_BinaryTreeTest#setup44,1780
|
68
|
-
def teardown::TC_BinaryTreeTest#teardown52,2034
|
69
|
-
def test_initialize::TC_BinaryTreeTest#test_initialize58,2144
|
70
|
-
def test_add::TC_BinaryTreeTest#test_add62,2239
|
71
|
-
def test_left::TC_BinaryTreeTest#test_left80,2877
|
72
|
-
def test_right::TC_BinaryTreeTest#test_right87,3136
|
73
|
-
def test_left_assignment::TC_BinaryTreeTest#test_left_assignment94,3408
|
74
|
-
def test_right_assignment::TC_BinaryTreeTest#test_right_assignment110,4173
|
75
|
-
def test_isLeftChild?::TC_BinaryTreeTest#test_isLeftChild?127,5052
|
76
|
-
def test_isRightChild?::TC_BinaryTreeTest#test_isRightChild?141,5524
|
77
|
-
def test_swap_children::TC_BinaryTreeTest#test_swap_children154,6004
|
78
|
-
|
79
|
-
test/test_tree.rb,2386
|
80
|
-
class TC_TreeTest::TC_TreeTest42,1710
|
81
|
-
def setup::TC_TreeTest#setup46,1802
|
82
|
-
def loadChildren::TC_TreeTest#loadChildren74,2708
|
83
|
-
def teardown::TC_TreeTest#teardown80,2804
|
84
|
-
def test_root_setup::TC_TreeTest#test_root_setup84,2849
|
85
|
-
def test_root::TC_TreeTest#test_root99,3548
|
86
|
-
def test_hasContent::TC_TreeTest#test_hasContent107,3773
|
87
|
-
def test_length::TC_TreeTest#test_length117,4141
|
88
|
-
def test_comparator::TC_TreeTest#test_comparator123,4288
|
89
|
-
def test_to_s::TC_TreeTest#test_to_s143,4828
|
90
|
-
def test_firstSibling::TC_TreeTest#test_firstSibling151,5112
|
91
|
-
def test_isFirstSibling::TC_TreeTest#test_isFirstSibling161,5590
|
92
|
-
def test_isLastSibling::TC_TreeTest#test_isLastSibling171,5998
|
93
|
-
def test_lastSibling::TC_TreeTest#test_lastSibling181,6394
|
94
|
-
def test_siblings::TC_TreeTest#test_siblings191,6863
|
95
|
-
def test_isOnlyChild?::TC_TreeTest#test_isOnlyChild?210,7450
|
96
|
-
def test_nextSibling::TC_TreeTest#test_nextSibling219,7762
|
97
|
-
def test_previousSibling::TC_TreeTest#test_previousSibling228,8128
|
98
|
-
def test_add::TC_TreeTest#test_add237,8512
|
99
|
-
def test_remove::TC_TreeTest#test_remove256,8994
|
100
|
-
def test_removeAll::TC_TreeTest#test_removeAll283,9704
|
101
|
-
def test_removeFromParent::TC_TreeTest#test_removeFromParent292,9948
|
102
|
-
def test_children::TC_TreeTest#test_children309,10578
|
103
|
-
def test_firstChild::TC_TreeTest#test_firstChild335,11439
|
104
|
-
def test_lastChild::TC_TreeTest#test_lastChild344,11714
|
105
|
-
def test_find::TC_TreeTest#test_find353,11979
|
106
|
-
def test_parentage::TC_TreeTest#test_parentage367,12514
|
107
|
-
def test_each::TC_TreeTest#test_each375,12798
|
108
|
-
def test_each_leaf::TC_TreeTest#test_each_leaf392,13420
|
109
|
-
def test_parent::TC_TreeTest#test_parent406,13890
|
110
|
-
def test_indexed_access::TC_TreeTest#test_indexed_access415,14271
|
111
|
-
def test_printTree::TC_TreeTest#test_printTree423,14541
|
112
|
-
def test_dump::TC_TreeTest#test_dump429,14612
|
113
|
-
def test_collect::TC_TreeTest#test_collect442,15085
|
114
|
-
def test_freezeTree::TC_TreeTest#test_freezeTree451,15304
|
115
|
-
def test_content::TC_TreeTest#test_content460,15568
|
116
|
-
def test_depth::TC_TreeTest#test_depth466,15722
|
117
|
-
def test_breadth::TC_TreeTest#test_breadth484,16216
|
118
|
-
def test_breadth_each::TC_TreeTest#test_breadth_each502,16810
|
119
|
-
def test_preordered_each::TC_TreeTest#test_preordered_each542,17749
|
120
|
-
def test_detached_copy::TC_TreeTest#test_detached_copy575,18593
|