rubytree 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,5 +1,24 @@
1
+ 2007-10-01 Anupam Sengupta <anupamsg@gmail.com>
2
+
3
+ * Rakefile: Added an optional task for rcov code coverage.
4
+ Added a dependency for rake in the Gem Specification.
5
+
6
+ * test/test_binarytree.rb: Removed the unnecessary dependency on "Person" class.
7
+
8
+ * test/test_tree.rb: Removed dependency on the redundant "Person" class.
9
+ (TC_TreeTest::test_comparator): Added a new test for the spaceship operator.
10
+ (TC_TreeTest::test_hasContent): Added tests for hasContent? and length methods.
11
+
1
12
  2007-08-30 Anupam Sengupta <anupamsg@gmail.com>
2
13
 
14
+ * test/test_tree.rb (TC_TreeTest::test_preordered_each, TC_TreeTest::test_breadth_each, TC_TreeTest::test_detached_copy):
15
+ Added new tests for the new functions added to tree.rb.
16
+
17
+ * lib/tree.rb (Tree::TreeNode::detached_copy, Tree::TreeNode::preordered_each, Tree::TreeNode::breadth_each):
18
+ Added new functions for returning a detached copy of the node and
19
+ for performing breadth first traversal. Also added the pre-ordered
20
+ traversal function which is an alias of the existing 'each' method.
21
+
3
22
  * test/test_binarytree.rb (TC_BinaryTreeTest::test_swap_children):
4
23
  Added a test case for the children swap function.
5
24
 
data/README CHANGED
@@ -1,9 +1,9 @@
1
- = Rubytree 0.4.1
1
+ = Rubytree 0.4.2
2
2
 
3
3
  (c) 2006, 2007 Anupam Sengupta
4
4
  http://rubytree.rubyforge.org
5
5
 
6
- Document Revision: $Revision: 1.10 $ by $Author: anupamsg $
6
+ Document Revision: $Revision: 1.11 $ by $Author: anupamsg $
7
7
 
8
8
  == License
9
9
 
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  # Rakefile
2
2
  #
3
- # $Revision: 1.21 $ by $Author: anupamsg $
3
+ # $Revision: 1.23 $ by $Author: anupamsg $
4
4
  # $Name: $
5
5
  #
6
6
  # Copyright (c) 2006, 2007 Anupam Sengupta
@@ -61,6 +61,7 @@ spec = Gem::Specification.new do |s|
61
61
  s.homepage = "http://rubytree.rubyforge.org/"
62
62
  s.rubyforge_project = 'rubytree'
63
63
  s.summary = "Ruby implementation of the Tree data structure."
64
+ s.add_dependency('rake', '>= 0.7.2')
64
65
 
65
66
  s.description = <<-END
66
67
  Provides a generic tree data-structure with ability to
@@ -110,7 +111,18 @@ begin
110
111
  rescue LoadError
111
112
  end
112
113
 
113
- # $Log: Rakefile,v $
114
+ # Optional RCOV Task
115
+ # Needs http://eigenclass.org/hiki/rcov
116
+ begin
117
+ require 'rcov/rcovtask'
118
+ Rcov::RcovTask.new do |t|
119
+ t.test_files = FileList['test/test*.rb']
120
+ # t.verbose = true # uncomment to see the executed commands
121
+ end
122
+ rescue LoadError
123
+ end
124
+
125
+ #Rakefile,v $
114
126
  # Revision 1.21 2007/07/21 05:14:43 anupamsg
115
127
  # Added a VERSION constant to the Tree module,
116
128
  # and using the same in the Rakefile.
data/TAGS ADDED
@@ -0,0 +1,120 @@
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
@@ -1,6 +1,6 @@
1
1
  # tree.rb
2
2
  #
3
- # $Revision: 1.18 $ by $Author: anupamsg $
3
+ # $Revision: 1.19 $ by $Author: anupamsg $
4
4
  # $Name: $
5
5
  #
6
6
  # = tree.rb - Generic Multi-way Tree implementation
@@ -47,7 +47,7 @@
47
47
  # This module mixes in the Enumerable module.
48
48
  module Tree
49
49
 
50
- VERSION = '0.4.1'
50
+ VERSION = '0.4.2'
51
51
 
52
52
  # == TreeNode Class Description
53
53
  #
@@ -130,6 +130,11 @@ module Tree
130
130
  @children = []
131
131
  end
132
132
 
133
+ # Returns a copy of this node, with the parent and children links removed.
134
+ def detached_copy
135
+ Tree::TreeNode.new(@name, @content ? @content.clone : nil)
136
+ end
137
+
133
138
  # Print the string representation of this node.
134
139
  def to_s
135
140
 
@@ -261,14 +266,36 @@ module Tree
261
266
  end
262
267
 
263
268
  # Returns every node (including the receiver node) from the tree to the
264
- # specified block. The traversal is depth first and from left to right.
269
+ # specified block. The traversal is depth first and from left to right in
270
+ # pre-ordered sequence.
265
271
  def each &block
266
272
  yield self
267
273
  children { |child| child.each(&block) }
268
274
  end
269
275
 
270
- # Yields all leaf nodes from this node to the specified block. May yield this
271
- # node as well if this is a leaf node. Leaf traversal is left to right.
276
+ # Traverses the tree in a pre-ordered sequence. This is equivalent to
277
+ # TreeNode#each
278
+ def preordered_each &block
279
+ each &block
280
+ end
281
+
282
+ # Performs breadth first traversal of the tree rooted at this node. The
283
+ # traversal in a given level is from left to right.
284
+ def breadth_each &block
285
+ node_queue = [self] # Create a queue with self as the initial entry
286
+
287
+ # Use a queue to do breadth traversal
288
+ until node_queue.empty?
289
+ node_to_traverse = node_queue.shift
290
+ yield node_to_traverse
291
+ # Enqueue the children from left to right.
292
+ node_to_traverse.children { |child| node_queue.push child }
293
+ end
294
+ end
295
+
296
+ # Yields all leaf nodes from this node to the specified block. May yield
297
+ # this node as well if this is a leaf node. Leaf traversal depth first and
298
+ # left to right.
272
299
  def each_leaf &block
273
300
  self.each { |node| yield(node) if node.isLeaf? }
274
301
  end
@@ -461,6 +488,10 @@ module Tree
461
488
  end
462
489
 
463
490
  # $Log: tree.rb,v $
491
+ # Revision 1.19 2007/08/31 01:16:27 anupamsg
492
+ # Added breadth and pre-order traversals for the tree. Also added a method
493
+ # to return the detached copy of a node from the tree.
494
+ #
464
495
  # Revision 1.18 2007/07/21 05:14:44 anupamsg
465
496
  # Added a VERSION constant to the Tree module,
466
497
  # and using the same in the Rakefile.
@@ -2,7 +2,7 @@
2
2
 
3
3
  # testtree.rb
4
4
  #
5
- # $Revision: 1.2 $ by $Author: anupamsg $
5
+ # $Revision: 1.3 $ by $Author: anupamsg $
6
6
  # $Name: $
7
7
  #
8
8
  # Copyright (c) 2006, 2007 Anupam Sengupta
@@ -37,7 +37,6 @@
37
37
 
38
38
  require 'test/unit'
39
39
  require 'tree/binarytree'
40
- require 'person'
41
40
 
42
41
  # Test class for the Tree node.
43
42
  class TC_BinaryTreeTest < Test::Unit::TestCase
@@ -171,6 +170,13 @@ class TC_BinaryTreeTest < Test::Unit::TestCase
171
170
  end
172
171
 
173
172
  # $Log: test_binarytree.rb,v $
173
+ # Revision 1.3 2007/10/02 03:07:30 anupamsg
174
+ # * Rakefile: Added an optional task for rcov code coverage.
175
+ #
176
+ # * test/test_binarytree.rb: Removed the unnecessary dependency on "Person" class.
177
+ #
178
+ # * test/test_tree.rb: Removed dependency on the redundant "Person" class.
179
+ #
174
180
  # Revision 1.2 2007/08/30 22:06:13 anupamsg
175
181
  # Added a new swap_children method for the Binary Tree class.
176
182
  # Also made minor documentation updates and test additions.
@@ -2,7 +2,7 @@
2
2
 
3
3
  # testtree.rb
4
4
  #
5
- # $Revision: 1.1 $ by $Author: anupamsg $
5
+ # $Revision: 1.4 $ by $Author: anupamsg $
6
6
  # $Name: $
7
7
  #
8
8
  # Copyright (c) 2006, 2007 Anupam Sengupta
@@ -37,11 +37,12 @@
37
37
 
38
38
  require 'test/unit'
39
39
  require 'tree'
40
- require 'person'
41
40
 
42
41
  # Test class for the Tree node.
43
42
  class TC_TreeTest < Test::Unit::TestCase
44
43
 
44
+ Person = Struct::new(:First, :last)
45
+
45
46
  def setup
46
47
  @root = Tree::TreeNode.new("ROOT", "Root Node")
47
48
 
@@ -88,6 +89,7 @@ class TC_TreeTest < Test::Unit::TestCase
88
89
  assert_equal("Root Node", @root.content, "Content should be 'Root Node'")
89
90
  assert(@root.isRoot?, "Should identify as root")
90
91
  assert(!@root.hasChildren?, "Cannot have any children")
92
+ assert(@root.hasContent?, "This root should have content")
91
93
  assert_equal(1, @root.size, "Number of nodes should be one")
92
94
  assert_nil(@root.siblings, "Root cannot have any children")
93
95
 
@@ -102,6 +104,50 @@ class TC_TreeTest < Test::Unit::TestCase
102
104
  assert_same(@root, @child4.root, "Root should be ROOT")
103
105
  end
104
106
 
107
+ def test_hasContent
108
+ aNode = Tree::TreeNode.new("A Node")
109
+ assert_nil(aNode.content, "The node should not have content")
110
+ assert(!aNode.hasContent?, "The node should not have content")
111
+
112
+ aNode.content = "Something"
113
+ assert_not_nil(aNode.content, "The node should now have content")
114
+ assert(aNode.hasContent?, "The node should now have content")
115
+ end
116
+
117
+ def test_length
118
+ loadChildren
119
+
120
+ assert_equal(@root.size, @root.length, "Length and size methods should return the same result")
121
+ end
122
+
123
+ def test_comparator
124
+ firstNode = Tree::TreeNode.new(1)
125
+ secondNode = Tree::TreeNode.new(2)
126
+
127
+ assert_equal(firstNode <=> nil, +1)
128
+ assert_equal(firstNode <=> secondNode, -1)
129
+
130
+ secondNode = Tree::TreeNode.new(1)
131
+ assert_equal(firstNode <=> secondNode, 0)
132
+
133
+ firstNode = Tree::TreeNode.new("ABC")
134
+ secondNode = Tree::TreeNode.new("XYZ")
135
+
136
+ assert_equal(firstNode <=> nil, +1)
137
+ assert_equal(firstNode <=> secondNode, -1)
138
+
139
+ secondNode = Tree::TreeNode.new("ABC")
140
+ assert_equal(firstNode <=> secondNode, 0)
141
+ end
142
+
143
+ def test_to_s
144
+ aNode = Tree::TreeNode.new("A Node", "Some Content")
145
+
146
+ expectedString = "Node Name: A Node Content: Some Content Parent: <None> Children: 0 Total Nodes: 1"
147
+
148
+ assert_equal(expectedString, aNode.to_s, "The string representation should be same")
149
+ end
150
+
105
151
  def test_firstSibling
106
152
  loadChildren
107
153
 
@@ -383,9 +429,6 @@ class TC_TreeTest < Test::Unit::TestCase
383
429
  def test_dump
384
430
  loadChildren
385
431
 
386
- pers = Person.new("John", "Doe")
387
- #@root.content = pers
388
-
389
432
  data = Marshal.dump(@root)
390
433
 
391
434
  newRoot = Marshal.load(data)
@@ -415,7 +458,7 @@ class TC_TreeTest < Test::Unit::TestCase
415
458
  end
416
459
 
417
460
  def test_content
418
- pers = Person.new("John", "Doe")
461
+ pers = Person::new("John", "Doe")
419
462
  @root.content = pers
420
463
  assert_same(pers, @root.content, "Content should be the same")
421
464
  end
@@ -439,27 +482,133 @@ class TC_TreeTest < Test::Unit::TestCase
439
482
  end
440
483
 
441
484
  def test_breadth
442
- assert_equal(1, @root.breadth, "A single node's breadth is 1")
485
+ assert_equal(1, @root.breadth, "A single node's breadth is 1")
443
486
 
444
- @root << @child1
445
- assert_equal(1, @root.breadth, "This should be of breadth 1")
487
+ @root << @child1
488
+ assert_equal(1, @root.breadth, "This should be of breadth 1")
446
489
 
447
- @root << @child2
448
- assert_equal(2, @child1.breadth, "This should be of breadth 2")
449
- assert_equal(2, @child2.breadth, "This should be of breadth 2")
490
+ @root << @child2
491
+ assert_equal(2, @child1.breadth, "This should be of breadth 2")
492
+ assert_equal(2, @child2.breadth, "This should be of breadth 2")
450
493
 
451
- @root << @child3
452
- assert_equal(3, @child1.breadth, "This should be of breadth 3")
453
- assert_equal(3, @child2.breadth, "This should be of breadth 3")
494
+ @root << @child3
495
+ assert_equal(3, @child1.breadth, "This should be of breadth 3")
496
+ assert_equal(3, @child2.breadth, "This should be of breadth 3")
497
+
498
+ @child3 << @child4
499
+ assert_equal(1, @child4.breadth, "This should be of breadth 1")
500
+ end
501
+
502
+ def test_breadth_each
503
+ j = Tree::TreeNode.new("j")
504
+ f = Tree::TreeNode.new("f")
505
+ k = Tree::TreeNode.new("k")
506
+ a = Tree::TreeNode.new("a")
507
+ d = Tree::TreeNode.new("d")
508
+ h = Tree::TreeNode.new("h")
509
+ z = Tree::TreeNode.new("z")
510
+
511
+ # The expected order of response
512
+ expected_array = [j,
513
+ f, k,
514
+ a, h, z,
515
+ d]
516
+
517
+ # Create the following Tree
518
+ # j <-- level 0 (Root)
519
+ # / \
520
+ # f k <-- level 1
521
+ # / \ \
522
+ # a h z <-- level 2
523
+ # \
524
+ # d <-- level 3
525
+ j << f << a << d
526
+ f << h
527
+ j << k << z
528
+
529
+ result_array = []
530
+
531
+ # Create the response
532
+ j.breadth_each { |node| result_array << node.detached_copy }
533
+
534
+ expected_array.each_index do |i|
535
+ # Match only the names.
536
+ assert_equal(expected_array[i].name, result_array[i].name)
537
+ end
538
+
539
+ end
540
+
541
+
542
+ def test_preordered_each
543
+ j = Tree::TreeNode.new("j")
544
+ f = Tree::TreeNode.new("f")
545
+ k = Tree::TreeNode.new("k")
546
+ a = Tree::TreeNode.new("a")
547
+ d = Tree::TreeNode.new("d")
548
+ h = Tree::TreeNode.new("h")
549
+ z = Tree::TreeNode.new("z")
550
+
551
+ # The expected order of response
552
+ expected_array = [j, f, a, d, h, k, z]
553
+
554
+ # Create the following Tree
555
+ # j <-- level 0 (Root)
556
+ # / \
557
+ # f k <-- level 1
558
+ # / \ \
559
+ # a h z <-- level 2
560
+ # \
561
+ # d <-- level 3
562
+ j << f << a << d
563
+ f << h
564
+ j << k << z
565
+
566
+ result_array = []
567
+ j.preordered_each { |node| result_array << node.detached_copy}
568
+
569
+ expected_array.each_index do |i|
570
+ # Match only the names.
571
+ assert_equal(expected_array[i].name, result_array[i].name)
572
+ end
573
+ end
574
+
575
+ def test_detached_copy
576
+ loadChildren
577
+
578
+ assert(@root.hasChildren?, "The root should have children")
579
+ copy_of_root = @root.detached_copy
580
+ assert(!copy_of_root.hasChildren?, "The copy should not have children")
581
+ assert_equal(@root.name, copy_of_root.name, "The names should be equal")
582
+
583
+ # Try the same test with a child node
584
+ assert(!@child3.isRoot?, "Child 3 is not a root")
585
+ assert(@child3.hasChildren?, "Child 3 has children")
586
+ copy_of_child3 = @child3.detached_copy
587
+ assert(copy_of_child3.isRoot?, "Child 3's copy is a root")
588
+ assert(!copy_of_child3.hasChildren?, "Child 3's copy does not have children")
589
+ end
454
590
 
455
- @child3 << @child4
456
- assert_equal(1, @child4.breadth, "This should be of breadth 1")
457
- end
458
591
  end
459
592
 
460
593
  __END__
461
594
 
462
595
  # $Log: test_tree.rb,v $
596
+ # Revision 1.4 2007/10/02 03:38:11 anupamsg
597
+ # Removed dependency on the redundant "Person" class.
598
+ # (TC_TreeTest::test_comparator): Added a new test for the spaceship operator.
599
+ # (TC_TreeTest::test_hasContent): Added tests for hasContent? and length methods.
600
+ #
601
+ # Revision 1.3 2007/10/02 03:07:30 anupamsg
602
+ # * Rakefile: Added an optional task for rcov code coverage.
603
+ #
604
+ # * test/test_binarytree.rb: Removed the unnecessary dependency on "Person" class.
605
+ #
606
+ # * test/test_tree.rb: Removed dependency on the redundant "Person" class.
607
+ #
608
+ # Revision 1.2 2007/08/31 01:16:28 anupamsg
609
+ # Added breadth and pre-order traversals for the tree. Also added a method
610
+ # to return the detached copy of a node from the tree.
611
+ #
463
612
  # Revision 1.1 2007/07/21 04:52:38 anupamsg
464
613
  # Renamed the test files.
465
614
  #
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.2
2
+ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: rubytree
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.4.1
7
- date: 2007-08-30 00:00:00 -07:00
6
+ version: 0.4.2
7
+ date: 2007-10-01 00:00:00 -07:00
8
8
  summary: Ruby implementation of the Tree data structure.
9
9
  require_paths:
10
10
  - lib
@@ -31,13 +31,11 @@ authors:
31
31
  files:
32
32
  - ChangeLog
33
33
  - COPYING
34
- - lib
35
34
  - Rakefile
36
35
  - README
37
- - test
36
+ - TAGS
38
37
  - lib/tree/binarytree.rb
39
38
  - lib/tree.rb
40
- - test/person.rb
41
39
  - test/test_binarytree.rb
42
40
  - test/test_tree.rb
43
41
  test_files:
@@ -55,5 +53,13 @@ extensions: []
55
53
 
56
54
  requirements: []
57
55
 
58
- dependencies: []
59
-
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:
@@ -1,54 +0,0 @@
1
- # person.rb
2
- #
3
- # $Revision: 1.8 $ by $Author: anupamsg $
4
- # $Name: $
5
- #
6
- # Copyright (c) 2006, 2007 Anupam Sengupta
7
- #
8
- # All rights reserved.
9
- #
10
- # Redistribution and use in source and binary forms, with or without modification,
11
- # are permitted provided that the following conditions are met:
12
- #
13
- # - Redistributions of source code must retain the above copyright notice, this
14
- # list of conditions and the following disclaimer.
15
- #
16
- # - Redistributions in binary form must reproduce the above copyright notice, this
17
- # list of conditions and the following disclaimer in the documentation and/or
18
- # other materials provided with the distribution.
19
- #
20
- # - Neither the name of the organization nor the names of its contributors may
21
- # be used to endorse or promote products derived from this software without
22
- # specific prior written permission.
23
- #
24
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25
- # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26
- # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27
- # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
28
- # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29
- # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30
- # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
31
- # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33
- # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
- #
35
-
36
- # Define a simple class for testing the RubyTree implementation
37
- class Person
38
- attr_reader :first, :last
39
- attr_writer :first, :last
40
- def initialize(first, last)
41
- @first = first
42
- @last = last
43
- end
44
-
45
- def to_s
46
- "#@first, #@last"
47
- end
48
-
49
- end
50
-
51
- # $Log: person.rb,v $
52
- # Revision 1.8 2007/07/17 03:39:28 anupamsg
53
- # Moved the CVS Log keyword to end of the files.
54
- #