polyphony 0.46.1 → 0.47.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -130,3 +130,120 @@ class QueueTest < MiniTest::Test
130
130
  assert_equal 0, @queue.size
131
131
  end
132
132
  end
133
+
134
+ class CappedQueueTest < MiniTest::Test
135
+ def setup
136
+ super
137
+ @queue = Polyphony::Queue.new
138
+ @queue.cap(3)
139
+ end
140
+
141
+ def test_capped?
142
+ q = Polyphony::Queue.new
143
+ assert_nil q.capped?
144
+
145
+ q.cap(3)
146
+ assert_equal 3, q.capped?
147
+ end
148
+
149
+ def test_initalize_with_cap
150
+ q = Polyphony::Queue.new(42)
151
+ assert_equal 42, q.capped?
152
+ end
153
+
154
+ def test_capped_push
155
+ buffer = []
156
+ a = spin do
157
+ (1..5).each do |i|
158
+ @queue.push(i)
159
+ buffer << :"p#{i}"
160
+ end
161
+ @queue.push :stop
162
+ end
163
+
164
+ snooze
165
+
166
+ b = spin_loop do
167
+ i = @queue.shift
168
+ raise Polyphony::Terminate if i == :stop
169
+ buffer << :"s#{i}"
170
+ end
171
+
172
+ Fiber.join(a, b)
173
+ assert_equal [:p1, :p2, :s1, :p3, :s2, :p4, :s3, :p5, :s4, :s5], buffer
174
+ end
175
+
176
+ def test_capped_multi_push
177
+ buffer = []
178
+ a = spin(:a) do
179
+ (1..3).each do |i|
180
+ @queue.push(i)
181
+ buffer << :"p#{i}"
182
+ end
183
+ end
184
+
185
+ buffer = []
186
+ b = spin(:b) do
187
+ (4..6).each do |i|
188
+ @queue.push(i)
189
+ buffer << :"p#{i}"
190
+ end
191
+ @queue.push :stop
192
+ end
193
+
194
+ c = spin_loop do
195
+ i = @queue.shift
196
+ raise Polyphony::Terminate if i == :stop
197
+ buffer << :"s#{i}"
198
+ snooze
199
+ end
200
+
201
+ Fiber.join(a, b, c)
202
+ assert_equal [:p1, :p4, :s1, :p5, :p2, :s4, :p3, :s5, :p6, :s2, :s3, :s6], buffer
203
+ end
204
+
205
+ def test_capped_clear
206
+ buffer = []
207
+ a = spin(:a) do
208
+ (1..5).each do |i|
209
+ @queue.push(i)
210
+ buffer << i
211
+ end
212
+ end
213
+
214
+ snooze while buffer.size < 3
215
+ @queue.clear
216
+ buffer << :clear
217
+
218
+ a.join
219
+ assert_equal [1, 2, 3, :clear, 4, 5], buffer
220
+ end
221
+
222
+ def test_capped_delete
223
+ buffer = []
224
+ a = spin(:a) do
225
+ (1..5).each do |i|
226
+ @queue.push(i)
227
+ buffer << i
228
+ end
229
+ end
230
+
231
+ i = 0
232
+ spin_loop do
233
+ i += 1
234
+ snooze
235
+ end
236
+
237
+ 5.times { snooze }
238
+ assert_equal 5, i
239
+ @queue.delete 1
240
+ buffer << :"d#{i}"
241
+ 3.times { snooze }
242
+ assert_equal 8, i
243
+ @queue.delete 2
244
+ buffer << :"d#{i}"
245
+
246
+ a.join
247
+ assert_equal [1, 2, 3, :d5, 4, :d8, 5], buffer
248
+ end
249
+ end
@@ -76,4 +76,22 @@ class SignalTrapTest < Minitest::Test
76
76
  buffer = i.read
77
77
  assert_equal "3-interrupt\n", buffer
78
78
  end
79
+
80
+ def test_io_in_signal_handler
81
+ i, o = IO.pipe
82
+ pid = Polyphony.fork do
83
+ trap('INT') { o.puts 'INT'; o.close; exit! }
84
+ i.close
85
+ sleep
86
+ ensure
87
+ o.close
88
+ end
89
+
90
+ o.close
91
+ sleep 0.1
92
+ Process.kill('INT', pid)
93
+ Thread.current.backend.waitpid(pid)
94
+ buffer = i.read
95
+ assert_equal "INT\n", buffer
96
+ end
79
97
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polyphony
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.46.1
4
+ version: 0.47.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-04 00:00:00.000000000 Z
11
+ date: 2020-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -348,6 +348,7 @@ files:
348
348
  - examples/core/await.rb
349
349
  - examples/core/channels.rb
350
350
  - examples/core/deferring-an-operation.rb
351
+ - examples/core/enumerable.rb
351
352
  - examples/core/erlang-style-genserver.rb
352
353
  - examples/core/forking.rb
353
354
  - examples/core/handling-signals.rb
@@ -385,7 +386,9 @@ files:
385
386
  - examples/io/tcpserver.rb
386
387
  - examples/io/tcpsocket.rb
387
388
  - examples/io/tunnel.rb
389
+ - examples/io/unix_socket.rb
388
390
  - examples/io/zip.rb
391
+ - examples/performance/fiber_resume.rb
389
392
  - examples/performance/fiber_transfer.rb
390
393
  - examples/performance/fs_read.rb
391
394
  - examples/performance/mem-usage.rb
@@ -394,6 +397,8 @@ files:
394
397
  - examples/performance/snooze.rb
395
398
  - examples/performance/snooze_raw.rb
396
399
  - examples/performance/switch.rb
400
+ - examples/performance/thread-vs-fiber/compare.rb
401
+ - examples/performance/thread-vs-fiber/em_server.rb
397
402
  - examples/performance/thread-vs-fiber/httparty_multi.rb
398
403
  - examples/performance/thread-vs-fiber/httparty_threaded.rb
399
404
  - examples/performance/thread-vs-fiber/polyphony_mt_server.rb
@@ -401,6 +406,7 @@ files:
401
406
  - examples/performance/thread-vs-fiber/polyphony_server_read_loop.rb
402
407
  - examples/performance/thread-vs-fiber/threaded_server.rb
403
408
  - examples/performance/thread_pool_perf.rb
409
+ - examples/performance/thread_switch.rb
404
410
  - ext/libev/Changes
405
411
  - ext/libev/LICENSE
406
412
  - ext/libev/README