linked-list 0.0.12 → 0.0.16
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 +4 -4
- data/.travis.yml +1 -2
- data/CHANGELOG.md +38 -0
- data/lib/linked-list/list.rb +14 -44
- data/lib/linked-list/version.rb +1 -1
- data/linked-list.gemspec +2 -2
- data/test/list_test.rb +80 -0
- metadata +16 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dff645cd01380ea68e75dd61a217a9c217a76eb229dc87817caab297444619d7
|
4
|
+
data.tar.gz: cbb85a2893c007c17729a3335b9ea9dd65ae9fd6b7f7a83ce4289fa024b21499
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8085a108cc3ac4a8edeea3585a0fd0c8adf1639e450d9d6f33e42b8002c3c1d0bd6a4fd6f88ff8b957075b36ff97bf236ed705446f6536ce029ba59c4f16d867
|
7
|
+
data.tar.gz: 44feefe384c7420d01bba47b31c9ebc825097d672250b0c0a5a5f1615e2c031678b086631bfab05180da05a560757146657fcfeac30f360163f6b08cd4c43f49
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,41 @@
|
|
1
|
+
# 0.0.x / Unreleased
|
2
|
+
|
3
|
+
# 0.0.16 / 2021-09-21
|
4
|
+
|
5
|
+
## Fixed
|
6
|
+
|
7
|
+
- Fixed bug when reference to prev node was not set correctly аfter using `shift`.
|
8
|
+
|
9
|
+
[Compare v0.0.15...v0.0.16](https://github.com/spectator/linked-list/compare/v0.0.15...v0.0.16)
|
10
|
+
|
11
|
+
# 0.0.15 / 2020-05-26
|
12
|
+
|
13
|
+
## Fixed
|
14
|
+
|
15
|
+
- Fixed bug when deleting the last node of the list. The @tail value was not updated if the @head value was updated.
|
16
|
+
|
17
|
+
[Compare v0.0.14...v0.0.15](https://github.com/spectator/linked-list/compare/v0.0.14...v0.0.15)
|
18
|
+
|
19
|
+
# 0.0.14 / 2020-04-17
|
20
|
+
|
21
|
+
## Fixed
|
22
|
+
|
23
|
+
Forced minimal rake version in gemspec to skip rake versions with security issues.
|
24
|
+
|
25
|
+
[Compare v0.0.13...v0.0.14](https://github.com/spectator/linked-list/compare/v0.0.13...v0.0.14)
|
26
|
+
|
27
|
+
# 0.0.13 / 2018-11-27
|
28
|
+
|
29
|
+
## Fixed
|
30
|
+
|
31
|
+
- Delete duplicate method definitions (nex3 in [#7](https://github.com/spectator/linked-list/pull/7))
|
32
|
+
|
33
|
+
## Added
|
34
|
+
|
35
|
+
- Allow `List#delete` to delete a `Node` in O(1) time (nex3 in [#6](https://github.com/spectator/linked-list/pull/6))
|
36
|
+
|
37
|
+
[Compare v0.0.12...v0.0.13](https://github.com/spectator/linked-list/compare/v0.0.12...v0.0.13)
|
38
|
+
|
1
39
|
# 0.0.12 / 2018-09-04
|
2
40
|
|
3
41
|
## Added
|
data/lib/linked-list/list.rb
CHANGED
@@ -130,10 +130,19 @@ module LinkedList
|
|
130
130
|
|
131
131
|
# Removes first matched node.data from the the list by passed block or value.
|
132
132
|
#
|
133
|
+
# If +val+ is a +Node+, removes that node from the list. Behavior is
|
134
|
+
# undefined if +val+ is a +Node+ that's not a member of this list.
|
135
|
+
#
|
133
136
|
# == Returns:
|
134
|
-
# Deleted node
|
137
|
+
# Deleted node's data
|
135
138
|
#
|
136
139
|
def delete(val = nil, &block)
|
140
|
+
if val.respond_to?(:to_node)
|
141
|
+
node = val.to_node
|
142
|
+
__unlink_node(node)
|
143
|
+
return node.data
|
144
|
+
end
|
145
|
+
|
137
146
|
each_node.find(&__to_matcher(val, &block)).tap do |node_to_delete|
|
138
147
|
return unless node_to_delete
|
139
148
|
__unlink_node(node_to_delete)
|
@@ -274,61 +283,22 @@ module LinkedList
|
|
274
283
|
self
|
275
284
|
end
|
276
285
|
|
277
|
-
# Inserts data after passed node.
|
278
|
-
#
|
279
|
-
# == Returns:
|
280
|
-
# Inserted node
|
281
|
-
#
|
282
|
-
def insert_after_node(data, node)
|
283
|
-
Node(data).tap do |new_node|
|
284
|
-
new_node.prev = node
|
285
|
-
new_node.next = node.next
|
286
|
-
if node.next
|
287
|
-
node.next.prev = new_node
|
288
|
-
else
|
289
|
-
@tail = new_node
|
290
|
-
end
|
291
|
-
node.next = new_node
|
292
|
-
@length += 1
|
293
|
-
end
|
294
|
-
end
|
295
|
-
|
296
|
-
|
297
|
-
# Inserts data before passed node.
|
298
|
-
#
|
299
|
-
# == Returns:
|
300
|
-
# Inserted node
|
301
|
-
#
|
302
|
-
def insert_before_node(data, node)
|
303
|
-
Node(data).tap do |new_node|
|
304
|
-
new_node.next = node
|
305
|
-
new_node.prev = node.prev
|
306
|
-
if node.prev
|
307
|
-
node.prev.next = new_node
|
308
|
-
else
|
309
|
-
@head = new_node
|
310
|
-
end
|
311
|
-
node.prev = new_node
|
312
|
-
@length += 1
|
313
|
-
end
|
314
|
-
end
|
315
|
-
|
316
286
|
private
|
317
287
|
|
318
288
|
def __unlink_node(node)
|
289
|
+
@head = node.next if node.prev.nil?
|
290
|
+
@tail = node.prev if node.next.nil?
|
291
|
+
|
319
292
|
if node.prev.nil?
|
320
293
|
node.next.prev = nil if node.next
|
321
|
-
@head = node.next
|
322
294
|
elsif node.next.nil?
|
323
295
|
node.prev.next = nil if node.prev
|
324
|
-
@tail = node.prev
|
325
296
|
else
|
326
297
|
node.prev.next, node.next.prev = node.next, node.prev
|
327
298
|
end
|
328
299
|
@length -= 1
|
329
300
|
end
|
330
301
|
|
331
|
-
|
332
302
|
def __to_matcher(val = nil, &block)
|
333
303
|
raise ArgumentError, 'either value or block should be passed' if val && block_given?
|
334
304
|
block = ->(e) { e == val } unless block_given?
|
@@ -338,7 +308,7 @@ module LinkedList
|
|
338
308
|
def __shift
|
339
309
|
head = @head
|
340
310
|
@head = @head.next
|
341
|
-
head.
|
311
|
+
@head.prev = nil if @head
|
342
312
|
head
|
343
313
|
end
|
344
314
|
|
data/lib/linked-list/version.rb
CHANGED
data/linked-list.gemspec
CHANGED
@@ -18,9 +18,9 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_development_dependency 'bundler', '>=
|
21
|
+
spec.add_development_dependency 'bundler', '>= 2.0', '< 3.0'
|
22
22
|
spec.add_development_dependency 'coveralls', '~> 0'
|
23
23
|
spec.add_development_dependency 'm', '~> 1.5', '>= 1.5.0'
|
24
24
|
spec.add_development_dependency 'minitest', '>= 5.0', '<= 6.0'
|
25
|
-
spec.add_development_dependency 'rake', '
|
25
|
+
spec.add_development_dependency 'rake', '>= 12.3.3'
|
26
26
|
end
|
data/test/list_test.rb
CHANGED
@@ -4,6 +4,7 @@ describe LinkedList::List do
|
|
4
4
|
let(:list) { create_list }
|
5
5
|
let(:node_1) { create_node('foo') }
|
6
6
|
let(:node_2) { create_node('bar') }
|
7
|
+
let(:node_3) { create_node('baz') }
|
7
8
|
|
8
9
|
describe 'instantiation' do
|
9
10
|
it 'assigns first to nil' do
|
@@ -476,6 +477,75 @@ describe LinkedList::List do
|
|
476
477
|
end
|
477
478
|
end
|
478
479
|
end
|
480
|
+
|
481
|
+
describe 'by node' do
|
482
|
+
it 'deletes first node' do
|
483
|
+
list.push(node_1)
|
484
|
+
list.push(node_2)
|
485
|
+
list.push(node_3)
|
486
|
+
list.delete(node_1)
|
487
|
+
assert_equal ['bar', 'baz'], list.to_a
|
488
|
+
end
|
489
|
+
|
490
|
+
it 'returns deleted value' do
|
491
|
+
list.push(node_1)
|
492
|
+
list.delete(node_1)
|
493
|
+
assert_equal node_1.data, list.delete(node_1)
|
494
|
+
end
|
495
|
+
|
496
|
+
it 'decreases length of list' do
|
497
|
+
list.push('foo')
|
498
|
+
list.push('bar')
|
499
|
+
list.push('baz')
|
500
|
+
list.delete('foo')
|
501
|
+
assert_equal 2, list.length
|
502
|
+
end
|
503
|
+
|
504
|
+
describe 'position edge cases' do
|
505
|
+
before do
|
506
|
+
list.push(node_1)
|
507
|
+
list.push(node_2)
|
508
|
+
list.push(node_3)
|
509
|
+
end
|
510
|
+
|
511
|
+
it 'deletes value from head' do
|
512
|
+
list.delete(node_1)
|
513
|
+
assert_equal [node_2.data, node_3.data], list.to_a
|
514
|
+
assert_equal node_2.data, list.first
|
515
|
+
assert_equal node_3.data, list.last
|
516
|
+
end
|
517
|
+
|
518
|
+
it 'deletes value from middle' do
|
519
|
+
list.delete(node_2)
|
520
|
+
assert_equal [node_1.data, node_3.data], list.to_a
|
521
|
+
assert_equal node_1.data, list.first
|
522
|
+
assert_equal node_3.data, list.last
|
523
|
+
end
|
524
|
+
|
525
|
+
|
526
|
+
it 'deletes value from tail' do
|
527
|
+
list.delete(node_3)
|
528
|
+
assert_equal [node_1.data, node_2.data], list.to_a
|
529
|
+
assert_equal node_1.data, list.first
|
530
|
+
assert_equal node_2.data, list.last
|
531
|
+
end
|
532
|
+
end
|
533
|
+
|
534
|
+
describe 'delete edge cases' do
|
535
|
+
it 'resets original list state when deleting the last node of the list' do
|
536
|
+
assert_nil list.first
|
537
|
+
assert_nil list.last
|
538
|
+
|
539
|
+
list.push(node_1)
|
540
|
+
assert_equal node_1.data, list.first
|
541
|
+
assert_equal node_1.data, list.last
|
542
|
+
|
543
|
+
list.delete(node_1)
|
544
|
+
assert_nil list.first
|
545
|
+
assert_nil list.last
|
546
|
+
end
|
547
|
+
end
|
548
|
+
end
|
479
549
|
end
|
480
550
|
|
481
551
|
describe '#delete_all' do
|
@@ -568,6 +638,16 @@ describe LinkedList::List do
|
|
568
638
|
assert_nil list.first
|
569
639
|
end
|
570
640
|
|
641
|
+
it 'sets reference to the prev node' do
|
642
|
+
list.push(node_1)
|
643
|
+
list.push(node_2)
|
644
|
+
assert_nil node_1.prev
|
645
|
+
assert_equal node_2.prev, node_1
|
646
|
+
|
647
|
+
list.shift
|
648
|
+
assert_nil node_2.prev
|
649
|
+
end
|
650
|
+
|
571
651
|
it 'reduces list length by 1' do
|
572
652
|
list.push(node_1)
|
573
653
|
list.shift
|
metadata
CHANGED
@@ -1,35 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: linked-list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yury Velikanau
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.3'
|
20
|
-
- - "<="
|
21
18
|
- !ruby/object:Gem::Version
|
22
19
|
version: '2.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '3.0'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '1.3'
|
30
|
-
- - "<="
|
31
28
|
- !ruby/object:Gem::Version
|
32
29
|
version: '2.0'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3.0'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: coveralls
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -88,16 +88,16 @@ dependencies:
|
|
88
88
|
name: rake
|
89
89
|
requirement: !ruby/object:Gem::Requirement
|
90
90
|
requirements:
|
91
|
-
- - "
|
91
|
+
- - ">="
|
92
92
|
- !ruby/object:Gem::Version
|
93
|
-
version:
|
93
|
+
version: 12.3.3
|
94
94
|
type: :development
|
95
95
|
prerelease: false
|
96
96
|
version_requirements: !ruby/object:Gem::Requirement
|
97
97
|
requirements:
|
98
|
-
- - "
|
98
|
+
- - ">="
|
99
99
|
- !ruby/object:Gem::Version
|
100
|
-
version:
|
100
|
+
version: 12.3.3
|
101
101
|
description: Ruby implementation of Doubly Linked List, following some Ruby idioms.
|
102
102
|
email:
|
103
103
|
- yury.velikanau@gmail.com
|
@@ -130,7 +130,7 @@ homepage: https://github.com/spectator/linked-list
|
|
130
130
|
licenses:
|
131
131
|
- MIT
|
132
132
|
metadata: {}
|
133
|
-
post_install_message:
|
133
|
+
post_install_message:
|
134
134
|
rdoc_options: []
|
135
135
|
require_paths:
|
136
136
|
- lib
|
@@ -145,9 +145,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
145
|
- !ruby/object:Gem::Version
|
146
146
|
version: '0'
|
147
147
|
requirements: []
|
148
|
-
|
149
|
-
|
150
|
-
signing_key:
|
148
|
+
rubygems_version: 3.1.2
|
149
|
+
signing_key:
|
151
150
|
specification_version: 4
|
152
151
|
summary: Ruby implementation of Doubly Linked List, following some Ruby idioms.
|
153
152
|
test_files:
|