@@ -28,12 +28,10 @@ module Concurrent
28
28
context '#set' do
29
29
30
30
it 'triggers the event' do
31
- @expected = false
32
- Thread . new { subject . wait ; @expected = true }
33
- sleep ( 0.1 )
31
+ latch = CountDownLatch . new ( 1 )
32
+ Thread . new { subject . wait . tap { latch . count_down } }
34
33
subject . set
35
- sleep ( 0.1 )
36
- @expected . should be_true
34
+ latch . wait ( 1 ) . should be_true
37
35
end
38
36
39
37
it 'sets the state to set' do
@@ -67,23 +65,19 @@ module Concurrent
67
65
end
68
66
69
67
it 'does not trigger an unset event' do
70
- @expected = false
71
- Thread . new { subject . wait ; @expected = true }
72
- sleep ( 0.1 )
68
+ latch = CountDownLatch . new ( 1 )
69
+ Thread . new { subject . wait . tap { latch . count_down } }
73
70
subject . reset
74
- sleep ( 0.1 )
75
- @expected . should be_false
71
+ latch . wait ( 0.1 ) . should be_false
76
72
end
77
73
78
74
it 'does not interrupt waiting threads when event is unset' do
79
- @expected = false
80
- Thread . new { subject . wait ; @expected = true }
81
- sleep ( 0.1 )
75
+ latch = CountDownLatch . new ( 1 )
76
+ Thread . new { subject . wait . tap { latch . count_down } }
82
77
subject . reset
83
- sleep ( 0.1 )
78
+ latch . wait ( 0.1 ) . should be_false
84
79
subject . set
85
- sleep ( 0.1 )
86
- @expected . should be_true
80
+ latch . wait ( 0.1 ) . should be_true
87
81
end
88
82
89
83
it 'returns true when called on an unset event' do
@@ -104,15 +98,41 @@ module Concurrent
104
98
end
105
99
end
106
100
101
+ #context '#pulse' do
102
+
103
+ #it 'triggers an unset event' do
104
+ #subject.reset
105
+ #latch = CountDownLatch.new(1)
106
+ #Thread.new{ subject.wait.tap{ puts "Boom!"; latch.count_down } }
107
+ #subject.pulse
108
+ #latch.wait(0.1).should be_true
109
+ #end
110
+
111
+ #it 'does nothing with a set event' do
112
+ #subject.set
113
+ #latch = CountDownLatch.new(1)
114
+ #Thread.new{ subject.wait.tap{ latch.count_down } }
115
+ #subject.pulse
116
+ #latch.wait(0.1).should be_true
117
+ #end
118
+
119
+ #it 'leaves the event in the unset state' do
120
+ #latch = CountDownLatch.new(1)
121
+ #Thread.new{ subject.wait.tap{ latch.count_down } }
122
+ #subject.pulse
123
+ #latch.wait(0.1)
124
+ #subject.should_not be_set
125
+ #end
126
+ #end
127
+
107
128
context '#wait' do
108
129
109
130
it 'returns immediately when the event has been set' do
110
131
subject . reset
111
- @expected = false
132
+ latch = CountDownLatch . new ( 1 )
112
133
subject . set
113
- Thread . new { subject . wait ( 1000 ) ; @expected = true }
114
- sleep ( 1 )
115
- @expected . should be_true
134
+ Thread . new { subject . wait ( 1000 ) . tap { latch . count_down } }
135
+ latch . wait ( 0.1 ) . should be_true
116
136
end
117
137
118
138
it 'returns true once the event is set' do
@@ -122,19 +142,19 @@ module Concurrent
122
142
123
143
it 'blocks indefinitely when the timer is nil' do
124
144
subject . reset
125
- @expected = false
126
- Thread . new { subject . wait ; @expected = true }
145
+ latch = CountDownLatch . new ( 1 )
146
+ Thread . new { subject . wait . tap { latch . count_down } }
147
+ latch . wait ( 0.1 ) . should be_false
127
148
subject . set
128
- sleep ( 1 )
129
- @expected . should be_true
149
+ latch . wait ( 0.1 ) . should be_true
130
150
end
131
151
132
152
it 'stops waiting when the timer expires' do
133
153
subject . reset
134
- @expected = false
135
- Thread . new { subject . wait ( 0.5 ) ; @expected = true }
136
- sleep ( 1 )
137
- @expected . should be_true
154
+ latch = CountDownLatch . new ( 1 )
155
+ Thread . new { subject . wait ( 0.2 ) . tap { latch . count_down } }
156
+ latch . wait ( 0.1 ) . should be_false
157
+ latch . wait . should be_true
138
158
end
139
159
140
160
it 'returns false when the timer expires' do
@@ -172,28 +192,24 @@ def subject.simulate_spurious_wake_up
172
192
end
173
193
174
194
it 'should resist to spurious wake ups without timeout' do
175
- @expected = false
176
- Thread . new { subject . wait ; @expected = true }
195
+ latch = CountDownLatch . new ( 1 )
196
+ Thread . new { subject . wait . tap { latch . count_down } }
177
197
178
198
sleep ( 0.1 )
179
199
subject . simulate_spurious_wake_up
180
200
181
- sleep ( 0.1 )
182
- @expected . should be_false
201
+ latch . wait ( 0.1 ) . should be_false
183
202
end
184
203
185
204
it 'should resist to spurious wake ups with timeout' do
186
- @expected = false
187
- Thread . new { subject . wait ( 0.5 ) ; @expected = true }
205
+ latch = CountDownLatch . new ( 1 )
206
+ Thread . new { subject . wait ( 0.3 ) . tap { latch . count_down } }
188
207
189
208
sleep ( 0.1 )
190
209
subject . simulate_spurious_wake_up
191
210
192
- sleep ( 0.1 )
193
- @expected . should be_false
194
-
195
- sleep ( 0.4 )
196
- @expected . should be_true
211
+ latch . wait ( 0.1 ) . should be_false
212
+ latch . wait ( 1 ) . should be_true
197
213
end
198
214
end
199
215
end
0 commit comments