Skip to content

Commit ca83c2a

Browse files
committed
AtomicMarkableReference: clean up specs
1 parent e341e18 commit ca83c2a

File tree

1 file changed

+24
-97
lines changed

1 file changed

+24
-97
lines changed
Lines changed: 24 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,37 @@
1-
shared_examples :atomic_markable_reference do
1+
describe Concurrent::Edge::AtomicMarkableReference do
22
# use a number outside JRuby's fixnum cache range, to ensure identity is
33
# preserved
4-
let(:atomic) { Concurrent::Edge::AtomicMarkableReference.new 1000, true }
4+
subject { described_class.new 1000, true }
55

66
specify :test_construct do
7-
expect(atomic.value).to eq 1000
8-
expect(atomic.marked?).to eq true
7+
expect(subject.value).to eq 1000
8+
expect(subject.marked?).to eq true
99
end
1010

1111
specify :test_set do
12-
val, mark = atomic.set(1001, true)
12+
val, mark = subject.set 1001, true
1313

14-
expect(atomic.value).to eq 1001
15-
expect(atomic.marked?).to eq true
14+
expect(subject.value).to eq 1001
15+
expect(subject.marked?).to eq true
1616

1717
expect(val).to eq 1001
1818
expect(mark).to eq true
1919
end
2020

2121
specify :test_update do
22-
val, mark = atomic.update { |v, m| [v + 1, !m] }
22+
val, mark = subject.update { |v, m| [v + 1, !m] }
2323

24-
expect(atomic.value).to eq 1001
25-
expect(atomic.marked?).to eq false
24+
expect(subject.value).to eq 1001
25+
expect(subject.marked?).to eq false
2626

2727
expect(val).to eq 1001
2828
expect(mark).to eq false
2929
end
3030

3131
specify :test_try_update do
32-
val, mark = atomic.try_update { |v, m| [v + 1, !m] }
32+
val, mark = subject.try_update { |v, m| [v + 1, !m] }
3333

34-
expect(atomic.value).to eq 1001
34+
expect(subject.value).to eq 1001
3535

3636
expect(val).to eq 1001
3737
expect(mark).to eq false
@@ -40,8 +40,8 @@
4040
specify :test_try_update_fails do
4141
expect do
4242
# assigning within block exploits implementation detail for test
43-
atomic.try_update do |v, m|
44-
atomic.set(1001, false)
43+
subject.try_update do |v, m|
44+
subject.set(1001, false)
4545
[v + 1, !m]
4646
end
4747
end.to raise_error Concurrent::ConcurrentUpdateError
@@ -51,9 +51,9 @@
5151
tries = 0
5252

5353
# assigning within block exploits implementation detail for test
54-
atomic.update do |v, m|
54+
subject.update do |v, m|
5555
tries += 1
56-
atomic.set(1001, false)
56+
subject.set(1001, false)
5757
[v + 1, !m]
5858
end
5959

@@ -62,98 +62,25 @@
6262

6363
specify :test_numeric_cas do
6464
# non-idempotent Float (JRuby, Rubinius, MRI < 2.0.0 or 32-bit)
65-
atomic.set(1.0 + 0.1, true)
66-
expect(atomic.compare_and_set(1.0 + 0.1, 1.2, true, false))
65+
subject.set(1.0 + 0.1, true)
66+
expect(subject.compare_and_set(1.0 + 0.1, 1.2, true, false))
6767
.to be_truthy, "CAS failed for (#{1.0 + 0.1}, true) => (1.2, false)"
6868

6969
# Bignum
70-
atomic.set(2**100, false)
71-
expect(atomic.compare_and_set(2**100, 2**99, false, true))
70+
subject.set(2**100, false)
71+
expect(subject.compare_and_set(2**100, 2**99, false, true))
7272
.to be_truthy, "CAS failed for (#{2**100}, false) => (0, true)"
7373

7474
# Rational
7575
require 'rational' unless ''.respond_to? :to_r
76-
atomic.set(Rational(1, 3), true)
77-
expect(atomic.compare_and_set(Rational(1, 3), Rational(3, 1), true, false))
76+
subject.set(Rational(1, 3), true)
77+
expect(subject.compare_and_set(Rational(1, 3), Rational(3, 1), true, false))
7878
.to be_truthy, "CAS failed for (#{Rational(1, 3)}, true) => (0, false)"
7979

8080
# Complex
8181
require 'complex' unless ''.respond_to? :to_c
82-
atomic.set(Complex(1, 2), false)
83-
expect(atomic.compare_and_set(Complex(1, 2), Complex(1, 3), false, true))
82+
subject.set(Complex(1, 2), false)
83+
expect(subject.compare_and_set(Complex(1, 2), Complex(1, 3), false, true))
8484
.to be_truthy, "CAS failed for (#{Complex(1, 2)}, false) => (0, false)"
8585
end
8686
end
87-
88-
# Specs for platform specific implementations
89-
module Concurrent
90-
module Edge
91-
describe AtomicMarkableReference do
92-
it_should_behave_like :atomic_markable_reference
93-
end
94-
95-
if defined? Concurrent::CAtomicMarkableReference
96-
describe CAtomicMarkableReference do
97-
skip 'Unimplemented'
98-
end
99-
elsif defined? Concurrent::JavaAtomicMarkableReference
100-
describe JavaAtomicMarkableReference do
101-
skip 'Unimplemented'
102-
end
103-
elsif defined? Concurrent::RbxAtomicMarkableReference
104-
describe RbxAtomicMarkableReference do
105-
skip 'Unimplemented'
106-
end
107-
end
108-
109-
describe AtomicMarkableReference do
110-
if ::Concurrent.on_jruby?
111-
it 'inherits from JavaAtomicMarkableReference' do
112-
skip 'Unimplemented'
113-
end
114-
elsif ::Concurrent.allow_c_extensions?
115-
it 'inherits from CAtomicMarkableReference' do
116-
skip 'Unimplemented'
117-
end
118-
elsif ::Concurrent.on_rbx?
119-
it 'inherits from RbxAtomicMarkableReference' do
120-
skip 'Unimplemented'
121-
end
122-
else
123-
it 'inherits from MutexAtomicMarkableReference' do
124-
skip 'Unimplemented'
125-
end
126-
end
127-
end
128-
129-
if defined? Concurrent::CAtomicMarkableReference
130-
describe CAtomicMarkableReference do
131-
skip 'Unimplemented'
132-
end
133-
elsif defined? Concurrent::JavaAtomicMarkableReference
134-
describe JavaAtomicMarkableReference do
135-
skip 'Unimplemented'
136-
end
137-
elsif defined? Concurrent::RbxAtomicMarkableReference
138-
describe RbxAtomicMarkableReference do
139-
skip 'Unimplemented'
140-
end
141-
end
142-
143-
describe AtomicMarkableReference do
144-
if ::Concurrent.on_jruby?
145-
it 'inherits from JavaAtomicMarkableReference' do
146-
skip 'Unimplemented'
147-
end
148-
elsif ::Concurrent.allow_c_extensions?
149-
it 'inherits from CAtomicMarkableReference' do
150-
skip 'Unimplemented'
151-
end
152-
elsif ::Concurrent.on_rbx?
153-
it 'inherits from RbxAtomicMarkableReference' do
154-
skip 'Unimplemented'
155-
end
156-
end
157-
end
158-
end
159-
end

0 commit comments

Comments
 (0)