avl_tree 1.1.2 → 1.1.3
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/lib/avl_tree.rb +6 -0
 - data/lib/red_black_tree.rb +6 -0
 - data/test/test_avl_tree.rb +20 -0
 - data/test/test_red_black_tree.rb +20 -0
 - metadata +9 -3
 
    
        data/lib/avl_tree.rb
    CHANGED
    
    | 
         @@ -57,6 +57,8 @@ class AVLTree 
     | 
|
| 
       57 
57 
     | 
    
         
             
                    @value = value
         
     | 
| 
       58 
58 
     | 
    
         
             
                  when 1
         
     | 
| 
       59 
59 
     | 
    
         
             
                    @right = @right.insert(key, value)
         
     | 
| 
      
 60 
     | 
    
         
            +
                  else
         
     | 
| 
      
 61 
     | 
    
         
            +
                    raise TypeError, "cannot compare #{key} and #{@key} with <=>"
         
     | 
| 
       60 
62 
     | 
    
         
             
                  end
         
     | 
| 
       61 
63 
     | 
    
         
             
                  rotate
         
     | 
| 
       62 
64 
     | 
    
         
             
                end
         
     | 
| 
         @@ -70,6 +72,8 @@ class AVLTree 
     | 
|
| 
       70 
72 
     | 
    
         
             
                    @value
         
     | 
| 
       71 
73 
     | 
    
         
             
                  when 1
         
     | 
| 
       72 
74 
     | 
    
         
             
                    @right.retrieve(key)
         
     | 
| 
      
 75 
     | 
    
         
            +
                  else
         
     | 
| 
      
 76 
     | 
    
         
            +
                    nil
         
     | 
| 
       73 
77 
     | 
    
         
             
                  end
         
     | 
| 
       74 
78 
     | 
    
         
             
                end
         
     | 
| 
       75 
79 
     | 
    
         | 
| 
         @@ -84,6 +88,8 @@ class AVLTree 
     | 
|
| 
       84 
88 
     | 
    
         
             
                  when 1
         
     | 
| 
       85 
89 
     | 
    
         
             
                    deleted, @right = @right.delete(key)
         
     | 
| 
       86 
90 
     | 
    
         
             
                    [deleted, self.rotate]
         
     | 
| 
      
 91 
     | 
    
         
            +
                  else
         
     | 
| 
      
 92 
     | 
    
         
            +
                    raise TypeError, "cannot compare #{key} and #{@key} with <=>"
         
     | 
| 
       87 
93 
     | 
    
         
             
                  end
         
     | 
| 
       88 
94 
     | 
    
         
             
                end
         
     | 
| 
       89 
95 
     | 
    
         | 
    
        data/lib/red_black_tree.rb
    CHANGED
    
    | 
         @@ -77,6 +77,8 @@ class RedBlackTree 
     | 
|
| 
       77 
77 
     | 
    
         
             
                    if black? and @left.black? and @right.red? and !@right.children_both_black?
         
     | 
| 
       78 
78 
     | 
    
         
             
                      ret = rebalance_for_right_insert
         
     | 
| 
       79 
79 
     | 
    
         
             
                    end
         
     | 
| 
      
 80 
     | 
    
         
            +
                  else
         
     | 
| 
      
 81 
     | 
    
         
            +
                    raise TypeError, "cannot compare #{key} and #{@key} with <=>"
         
     | 
| 
       80 
82 
     | 
    
         
             
                  end
         
     | 
| 
       81 
83 
     | 
    
         
             
                  ret.pullup_red
         
     | 
| 
       82 
84 
     | 
    
         
             
                end
         
     | 
| 
         @@ -90,6 +92,8 @@ class RedBlackTree 
     | 
|
| 
       90 
92 
     | 
    
         
             
                    @value
         
     | 
| 
       91 
93 
     | 
    
         
             
                  when 1
         
     | 
| 
       92 
94 
     | 
    
         
             
                    @right.retrieve(key)
         
     | 
| 
      
 95 
     | 
    
         
            +
                  else
         
     | 
| 
      
 96 
     | 
    
         
            +
                    nil
         
     | 
| 
       93 
97 
     | 
    
         
             
                  end
         
     | 
| 
       94 
98 
     | 
    
         
             
                end
         
     | 
| 
       95 
99 
     | 
    
         | 
| 
         @@ -110,6 +114,8 @@ class RedBlackTree 
     | 
|
| 
       110 
114 
     | 
    
         
             
                    if rebalance
         
     | 
| 
       111 
115 
     | 
    
         
             
                      ret, rebalance = rebalance_for_right_delete
         
     | 
| 
       112 
116 
     | 
    
         
             
                    end
         
     | 
| 
      
 117 
     | 
    
         
            +
                  else
         
     | 
| 
      
 118 
     | 
    
         
            +
                    raise TypeError, "cannot compare #{key} and #{@key} with <=>"
         
     | 
| 
       113 
119 
     | 
    
         
             
                  end
         
     | 
| 
       114 
120 
     | 
    
         
             
                  [deleted, ret, rebalance]
         
     | 
| 
       115 
121 
     | 
    
         
             
                end
         
     | 
    
        data/test/test_avl_tree.rb
    CHANGED
    
    | 
         @@ -155,6 +155,15 @@ class TestAVLTree < Test::Unit::TestCase 
     | 
|
| 
       155 
155 
     | 
    
         
             
                assert_equal 6, h.size
         
     | 
| 
       156 
156 
     | 
    
         
             
              end
         
     | 
| 
       157 
157 
     | 
    
         | 
| 
      
 158 
     | 
    
         
            +
              def test_different_type
         
     | 
| 
      
 159 
     | 
    
         
            +
                h = AVLTree.new
         
     | 
| 
      
 160 
     | 
    
         
            +
                h['a'] = 1
         
     | 
| 
      
 161 
     | 
    
         
            +
                assert_raise(TypeError) do
         
     | 
| 
      
 162 
     | 
    
         
            +
                  h[3.3] = 2
         
     | 
| 
      
 163 
     | 
    
         
            +
                end
         
     | 
| 
      
 164 
     | 
    
         
            +
                assert_nil h[3.3]
         
     | 
| 
      
 165 
     | 
    
         
            +
              end
         
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
       158 
167 
     | 
    
         
             
              def test_delete_leaf
         
     | 
| 
       159 
168 
     | 
    
         
             
                h = AVLTree.new
         
     | 
| 
       160 
169 
     | 
    
         
             
                h['b'] = 1
         
     | 
| 
         @@ -307,6 +316,17 @@ class TestAVLTree < Test::Unit::TestCase 
     | 
|
| 
       307 
316 
     | 
    
         
             
                assert_equal 5, h.dump_tree.split($/).size
         
     | 
| 
       308 
317 
     | 
    
         
             
              end
         
     | 
| 
       309 
318 
     | 
    
         | 
| 
      
 319 
     | 
    
         
            +
              def test_delete_different_type
         
     | 
| 
      
 320 
     | 
    
         
            +
                h = AVLTree.new
         
     | 
| 
      
 321 
     | 
    
         
            +
                h['a'] = 1
         
     | 
| 
      
 322 
     | 
    
         
            +
                h['abc'] = 2
         
     | 
| 
      
 323 
     | 
    
         
            +
                h['bb'] = 3
         
     | 
| 
      
 324 
     | 
    
         
            +
             
     | 
| 
      
 325 
     | 
    
         
            +
                assert_raise(TypeError) do
         
     | 
| 
      
 326 
     | 
    
         
            +
                  h.delete(3.3)
         
     | 
| 
      
 327 
     | 
    
         
            +
                end
         
     | 
| 
      
 328 
     | 
    
         
            +
              end
         
     | 
| 
      
 329 
     | 
    
         
            +
             
     | 
| 
       310 
330 
     | 
    
         
             
              def test_each
         
     | 
| 
       311 
331 
     | 
    
         
             
                h = AVLTree.new
         
     | 
| 
       312 
332 
     | 
    
         
             
                s = { 'aa' => 1, 'ab' => 2, 'bb' => 3, 'bc' => 4, 'a' => 5, 'abc' => 6 }
         
     | 
    
        data/test/test_red_black_tree.rb
    CHANGED
    
    | 
         @@ -169,6 +169,15 @@ class TestRedBlackTree < Test::Unit::TestCase 
     | 
|
| 
       169 
169 
     | 
    
         
             
                assert_equal 6, h.size
         
     | 
| 
       170 
170 
     | 
    
         
             
              end
         
     | 
| 
       171 
171 
     | 
    
         | 
| 
      
 172 
     | 
    
         
            +
              def test_different_type
         
     | 
| 
      
 173 
     | 
    
         
            +
                h = RedBlackTree.new
         
     | 
| 
      
 174 
     | 
    
         
            +
                h['a'] = 1
         
     | 
| 
      
 175 
     | 
    
         
            +
                assert_raise(TypeError) do
         
     | 
| 
      
 176 
     | 
    
         
            +
                  h[3.3] = 2
         
     | 
| 
      
 177 
     | 
    
         
            +
                end
         
     | 
| 
      
 178 
     | 
    
         
            +
                assert_nil h[3.3]
         
     | 
| 
      
 179 
     | 
    
         
            +
              end
         
     | 
| 
      
 180 
     | 
    
         
            +
             
     | 
| 
       172 
181 
     | 
    
         
             
              def test_delete_leaf
         
     | 
| 
       173 
182 
     | 
    
         
             
                h = RedBlackTree.new
         
     | 
| 
       174 
183 
     | 
    
         
             
                h['b'] = 1
         
     | 
| 
         @@ -457,6 +466,17 @@ class TestRedBlackTree < Test::Unit::TestCase 
     | 
|
| 
       457 
466 
     | 
    
         
             
                assert_equal '(f (c (b a) (d - e)) (i (g - h) (k j)))', h.dump_sexp
         
     | 
| 
       458 
467 
     | 
    
         
             
              end
         
     | 
| 
       459 
468 
     | 
    
         | 
| 
      
 469 
     | 
    
         
            +
              def test_delete_different_type
         
     | 
| 
      
 470 
     | 
    
         
            +
                h = RedBlackTree.new
         
     | 
| 
      
 471 
     | 
    
         
            +
                h['a'] = 1
         
     | 
| 
      
 472 
     | 
    
         
            +
                h['abc'] = 2
         
     | 
| 
      
 473 
     | 
    
         
            +
                h['bb'] = 3
         
     | 
| 
      
 474 
     | 
    
         
            +
             
     | 
| 
      
 475 
     | 
    
         
            +
                assert_raise(TypeError) do
         
     | 
| 
      
 476 
     | 
    
         
            +
                  h.delete(3.3)
         
     | 
| 
      
 477 
     | 
    
         
            +
                end
         
     | 
| 
      
 478 
     | 
    
         
            +
              end
         
     | 
| 
      
 479 
     | 
    
         
            +
             
     | 
| 
       460 
480 
     | 
    
         
             
              def test_each
         
     | 
| 
       461 
481 
     | 
    
         
             
                h = RedBlackTree.new
         
     | 
| 
       462 
482 
     | 
    
         
             
                s = { 'aa' => 1, 'ab' => 2, 'bb' => 3, 'bc' => 4, 'a' => 5, 'abc' => 6 }
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: avl_tree
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.1.3
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2012- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2012-05-09 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       14 
14 
     | 
    
         
             
            description: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            email: nahi@ruby-lang.org
         
     | 
| 
         @@ -38,15 +38,21 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       38 
38 
     | 
    
         
             
              - - ! '>='
         
     | 
| 
       39 
39 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       40 
40 
     | 
    
         
             
                  version: '0'
         
     | 
| 
      
 41 
     | 
    
         
            +
                  segments:
         
     | 
| 
      
 42 
     | 
    
         
            +
                  - 0
         
     | 
| 
      
 43 
     | 
    
         
            +
                  hash: -4094052252433988634
         
     | 
| 
       41 
44 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       42 
45 
     | 
    
         
             
              none: false
         
     | 
| 
       43 
46 
     | 
    
         
             
              requirements:
         
     | 
| 
       44 
47 
     | 
    
         
             
              - - ! '>='
         
     | 
| 
       45 
48 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       46 
49 
     | 
    
         
             
                  version: '0'
         
     | 
| 
      
 50 
     | 
    
         
            +
                  segments:
         
     | 
| 
      
 51 
     | 
    
         
            +
                  - 0
         
     | 
| 
      
 52 
     | 
    
         
            +
                  hash: -4094052252433988634
         
     | 
| 
       47 
53 
     | 
    
         
             
            requirements: []
         
     | 
| 
       48 
54 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       49 
     | 
    
         
            -
            rubygems_version: 1.8. 
     | 
| 
      
 55 
     | 
    
         
            +
            rubygems_version: 1.8.23
         
     | 
| 
       50 
56 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       51 
57 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       52 
58 
     | 
    
         
             
            summary: AVL tree and Red-black tree in Ruby
         
     |