red-black-tree 0.1.9 → 0.1.10

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 06ad66aa31594940e116b62cd872c61dc65ebb90964e097d84b4d540e9eefa2d
4
- data.tar.gz: 74ae5eae6622755db6e1df89fe03e598e8c9c3bd22ce20ebe363464c60c6f7f6
3
+ metadata.gz: ef532dd5b5da89ad3dbf780bba52824ecdece998306dc89d4742ddd7b9444a1b
4
+ data.tar.gz: dee8cd6cb0ebf9b837519d9131790590e6fcab86c5fe45af0d28cb603d53f224
5
5
  SHA512:
6
- metadata.gz: a17c8c5c6e2aab3cd53736d00ba3367b402450383b9f8a078669887d2590eed699e4d559dd588c18d90a0ce4fcde64b6a4c9aee8fc6452ab2d663e50c79b11bb
7
- data.tar.gz: cfcd5d572e43089fce345cab92d8327c3002f6c282f422316dc16d48020672ac8a62f878b33a67d73f55027498df1f36fa5d1f7526f31a943b0860338a7f00c5
6
+ metadata.gz: 75b0530cb685fb3cfcd1fa8435a8329e97df9fbd49e5e7063b5de0c34cbef24c453dc5d22481c8ba4cafe475f48ea3ccafa37788ef92b066c667882ce860130c
7
+ data.tar.gz: 8fdf009768bfb1551f2f4954ddab323c12b1d76d438c0be8b2bbb4ffe10816de58513e2642649ad78b25b1ea931a03a29a82b3d2df6a3dfeae70997158fe9183
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.1.10] - 2026-05-17
4
+
5
+ - Fix `RedBlackTree#delete!` orphaning predecessor's child when deleting a node with two valid children
6
+
3
7
  ## [0.1.9] - 2026-05-10
4
8
 
5
9
  - Add `Enumerable` to `RedBlackTree`
data/README.md CHANGED
@@ -156,34 +156,34 @@ Benchmark.ips do |x|
156
156
  x.compare!
157
157
  end
158
158
 
159
- #=> ruby 3.4.1 (2024-12-25 revision 48d4efcb85) +YJIT +PRISM [arm64-darwin24]
159
+ #=> ruby 4.0.3 (2026-04-21 revision 85ddef263a) +YJIT +PRISM [arm64-darwin23]
160
160
  #=> Warming up --------------------------------------
161
161
  #=> RedBlackTree#search 3.000 i/100ms
162
162
  #=> Array#find (gradual sort)
163
163
  #=> 1.000 i/100ms
164
164
  #=> Array#find (single sort)
165
- #=> 95.000 i/100ms
165
+ #=> 79.000 i/100ms
166
166
  #=> Array#bsearch (gradual sort)
167
167
  #=> 1.000 i/100ms
168
168
  #=> Array#bsearch (single sort)
169
- #=> 108.000 i/100ms
169
+ #=> 87.000 i/100ms
170
170
  #=> Calculating -------------------------------------
171
- #=> RedBlackTree#search 42.8504.7%) i/s (23.34 ms/i) - 216.000 in 5.049896s
171
+ #=> RedBlackTree#search 32.1886.2%) i/s (31.07 ms/i) - 162.000 in 5.051229s
172
172
  #=> Array#find (gradual sort)
173
- #=> 0.274 (± 0.0%) i/s (3.65 s/i) - 2.000 in 7.302412s
173
+ #=> 0.207 (± 0.0%) i/s (4.83 s/i) - 2.000 in 9.651532s
174
174
  #=> Array#find (single sort)
175
- #=> 935.4922.7%) i/s (1.07 ms/i) - 4.750k in 5.081415s
175
+ #=> 809.3103.8%) i/s (1.24 ms/i) - 4.108k in 5.084020s
176
176
  #=> Array#bsearch (gradual sort)
177
- #=> 0.275 (± 0.0%) i/s (3.63 s/i) - 2.000 in 7.269027s
177
+ #=> 0.205 (± 0.0%) i/s (4.88 s/i) - 2.000 in 9.753754s
178
178
  #=> Array#bsearch (single sort)
179
- #=> 1.104k2.0%) i/s (905.52 μs/i) - 5.616k in 5.087395s
180
- #=>
179
+ #=> 857.4971.0%) i/s (1.17 ms/i) - 4.350k in 5.073414s
180
+ #=>
181
181
  #=> Comparison:
182
- #=> Array#bsearch (single sort): 1104.3 i/s
183
- #=> Array#find (single sort): 935.5 i/s - 1.18x slower
184
- #=> RedBlackTree#search: 42.9 i/s - 25.77x slower
185
- #=> Array#bsearch (gradual sort): 0.3 i/s - 4013.67x slower
186
- #=> Array#find (gradual sort): 0.3 i/s - 4031.85x slower
182
+ #=> Array#bsearch (single sort): 857.5 i/s
183
+ #=> Array#find (single sort): 809.3 i/s - 1.06x slower
184
+ #=> RedBlackTree#search: 32.2 i/s - 26.64x slower
185
+ #=> Array#find (gradual sort): 0.2 i/s - 4138.00x slower
186
+ #=> Array#bsearch (gradual sort): 0.2 i/s - 4181.79x slower
187
187
  ```
188
188
 
189
189
  ## WIP Features
@@ -135,7 +135,9 @@ class RedBlackTree
135
135
 
136
136
  if node.children_are_valid?
137
137
  delete_node_with_two_children! node
138
- elsif node.single_child_is_valid?
138
+ end
139
+
140
+ if node.single_child_is_valid?
139
141
  delete_node_with_one_child! node
140
142
  elsif node.children_are_leaves?
141
143
  delete_leaf_node! node, original_node
@@ -348,7 +350,6 @@ class RedBlackTree
348
350
  predecessor = predecessor.right until predecessor.right.leaf?
349
351
  node.swap_colour_with! predecessor
350
352
  node.swap_position_with! predecessor
351
- node.swap_position_with! LeafNode.new
352
353
 
353
354
  @root = predecessor if is_root
354
355
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class RedBlackTree
4
- VERSION = "0.1.9"
4
+ VERSION = "0.1.10"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: red-black-tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Young
@@ -49,7 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
49
49
  - !ruby/object:Gem::Version
50
50
  version: '0'
51
51
  requirements: []
52
- rubygems_version: 4.0.6
52
+ rubygems_version: 4.0.10
53
53
  specification_version: 4
54
54
  summary: Red-Black Tree Data Structure for Ruby
55
55
  test_files: []