linked-list 0.0.12 → 0.0.16

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1d11a48bdb387744768bf129513fce5e6f31001988e8cf45bf8b974009938e98
4
- data.tar.gz: 9ba15ea4897065b9a111e6add68d6a60dac5ab61b9e3aba0ab83c7b42e91f8b5
3
+ metadata.gz: dff645cd01380ea68e75dd61a217a9c217a76eb229dc87817caab297444619d7
4
+ data.tar.gz: cbb85a2893c007c17729a3335b9ea9dd65ae9fd6b7f7a83ce4289fa024b21499
5
5
  SHA512:
6
- metadata.gz: 13f2b676935b4b18a9302e9a484f888c9c4730e81cab6fb6a891e4da5cc721fd0adf07d3f62b7a490fe985d32ed6143fdd9e01f586904214824c29c1cc8ed6f6
7
- data.tar.gz: 5f844ebe95b710614b30ebc6a0a732c361987882ea661cc30e3773432f1702c347a2cf8979f63c6b50e6011cdd348adff1f458d0a81d22cab67aaf3b15528c36
6
+ metadata.gz: 8085a108cc3ac4a8edeea3585a0fd0c8adf1639e450d9d6f33e42b8002c3c1d0bd6a4fd6f88ff8b957075b36ff97bf236ed705446f6536ce029ba59c4f16d867
7
+ data.tar.gz: 44feefe384c7420d01bba47b31c9ebc825097d672250b0c0a5a5f1615e2c031678b086631bfab05180da05a560757146657fcfeac30f360163f6b08cd4c43f49
data/.travis.yml CHANGED
@@ -1,7 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.3.0
4
- - 2.5.0
3
+ - 2.7
5
4
  cache: bundler
6
5
  env:
7
6
  CI: true
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
@@ -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.next = nil
311
+ @head.prev = nil if @head
342
312
  head
343
313
  end
344
314
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Linked
4
4
  module List
5
- VERSION = '0.0.12'
5
+ VERSION = '0.0.16'
6
6
  end
7
7
  end
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', '>= 1.3', '<= 2.0'
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', '~> 0'
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.12
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: 2018-09-05 00:00:00.000000000 Z
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: '0'
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: '0'
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
- rubyforge_project:
149
- rubygems_version: 2.7.6
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: