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.
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # testtree.rb
3
+ # test_binarytree.rb
4
4
  #
5
- # $Revision: 1.3 $ by $Author: anupamsg $
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
  #
@@ -2,7 +2,7 @@
2
2
 
3
3
  # testtree.rb
4
4
  #
5
- # $Revision: 1.4 $ by $Author: anupamsg $
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
- def test_dump
430
- loadChildren
431
-
432
- data = Marshal.dump(@root)
433
-
434
- newRoot = Marshal.load(data)
435
- assert(newRoot.isRoot?, "Must be a root node")
436
- assert_equal("ROOT", newRoot.name, "Must identify as ROOT")
437
- assert_equal("Root Node", newRoot.content, "Must have root's content")
438
- #assert_equal(pers.first, newRoot.content.first, "Must be the same content")
439
- assert_equal(@child4.name, newRoot['Child3']['Child31'].name, "Must be the grand child")
440
- end
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.4.2
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
- files:
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
- - Rakefile
37
+ - ChangeLog
38
+ - History.txt
39
+ - Manifest.txt
35
40
  - README
36
- - TAGS
37
- - lib/tree/binarytree.rb
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
- test_files:
42
- - test/test_binarytree.rb
43
- - test/test_tree.rb
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
- - COPYING
49
- - ChangeLog
50
- executables: []
51
-
52
- extensions: []
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
- dependencies:
57
- - !ruby/object:Gem::Dependency
58
- name: rake
59
- version_requirement:
60
- version_requirements: !ruby/object:Gem::Version::Requirement
61
- requirements:
62
- - - ">="
63
- - !ruby/object:Gem::Version
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