Skip to content

Commit c7984f3

Browse files
committed
Dereferenceable shared specs now called from IVar shared specs.
1 parent 9e3a27f commit c7984f3

File tree

6 files changed

+32
-29
lines changed

6 files changed

+32
-29
lines changed

lib/concurrent/ivar.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ module Concurrent
3939
# ivar.get #=> 14
4040
# ivar.set 2 # would now be an error
4141
class IVar
42-
4342
include Obligation
4443
include Observable
4544

lib/concurrent/promise.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -398,8 +398,6 @@ def self.any?(*promises)
398398
aggregate(:any?, *promises)
399399
end
400400

401-
protected :complete
402-
403401
protected
404402

405403
# Aggregate a collection of zero or more promises under a composite promise,
@@ -464,6 +462,7 @@ def complete(success, value, reason)
464462
end
465463

466464
children_to_notify.each { |child| notify_child(child) }
465+
observers.notify_and_delete_observers{ [Time.now, self.value, reason] }
467466
end
468467

469468
# @!visibility private

spec/concurrent/future_spec.rb

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
require_relative 'dereferenceable_shared'
21
require_relative 'ivar_shared'
32
require_relative 'observable_shared'
43
require_relative 'thread_arguments_shared'
@@ -32,21 +31,7 @@ module Concurrent
3231
end
3332

3433
it_should_behave_like :ivar do
35-
subject { Future.new(executor: :immediate){ nil } }
36-
end
37-
38-
it_should_behave_like :thread_arguments do
39-
40-
def get_ivar_from_no_args
41-
Concurrent::Future.execute{|*args| args }
42-
end
43-
44-
def get_ivar_from_args(opts)
45-
Concurrent::Future.execute(opts){|*args| args }
46-
end
47-
end
48-
49-
it_should_behave_like :dereferenceable do
34+
subject { Future.new(executor: :immediate){ value } }
5035

5136
def dereferenceable_subject(value, opts = {})
5237
opts = opts.merge(executor: executor)
@@ -64,6 +49,17 @@ def execute_dereferenceable(subject)
6449
end
6550
end
6651

52+
it_should_behave_like :thread_arguments do
53+
54+
def get_ivar_from_no_args
55+
Concurrent::Future.execute{|*args| args }
56+
end
57+
58+
def get_ivar_from_args(opts)
59+
Concurrent::Future.execute(opts){|*args| args }
60+
end
61+
end
62+
6763
it_should_behave_like :observable do
6864

6965
subject{ Future.new{ nil } }

spec/concurrent/ivar_shared.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
require_relative 'dereferenceable_shared'
12
require_relative 'obligation_shared'
23

34
shared_examples :ivar do
45

56
it_should_behave_like :obligation
7+
it_should_behave_like :dereferenceable
68

79
context 'initialization' do
810

spec/concurrent/ivar_spec.rb

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
require_relative 'dereferenceable_shared'
21
require_relative 'ivar_shared'
32
require_relative 'observable_shared'
43

@@ -32,9 +31,6 @@ module Concurrent
3231

3332
it_should_behave_like :ivar do
3433
subject{ IVar.new }
35-
end
36-
37-
it_should_behave_like :dereferenceable do
3834

3935
def dereferenceable_subject(value, opts = {})
4036
IVar.new(value, opts)

spec/concurrent/promise_spec.rb

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ module Concurrent
55

66
describe Promise do
77

8+
let!(:value) { 10 }
89
let(:executor) { PerThreadExecutor.new }
910

1011
let(:empty_root) { Promise.new(executor: executor){ nil } }
@@ -24,7 +25,22 @@ module Concurrent
2425
end
2526

2627
it_should_behave_like :ivar do
27-
subject{ Promise.new(executor: :immediate) }
28+
subject{ Promise.new(executor: :immediate){ value } }
29+
30+
def dereferenceable_subject(value, opts = {})
31+
opts = opts.merge(executor: executor)
32+
Promise.new(opts){ value }.execute.tap{ sleep(0.1) }
33+
end
34+
35+
def dereferenceable_observable(opts = {})
36+
opts = opts.merge(executor: executor)
37+
Promise.new(opts){ 'value' }
38+
end
39+
40+
def execute_dereferenceable(subject)
41+
subject.execute
42+
sleep(0.1)
43+
end
2844
end
2945

3046
it_should_behave_like :thread_arguments do
@@ -38,11 +54,6 @@ def get_ivar_from_args(opts)
3854
end
3955
end
4056

41-
it 'includes Dereferenceable' do
42-
promise = Promise.new{ nil }
43-
expect(promise).to be_a(Dereferenceable)
44-
end
45-
4657
context 'initializers' do
4758
describe '.fulfill' do
4859

0 commit comments

Comments
 (0)