Skip to content

Commit a265c9d

Browse files
100% test coverage.
1 parent 764fe23 commit a265c9d

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

test/async/safe.rb

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,5 +196,61 @@ def unsafe_method
196196
expect(regular_class.async_safe?).to be == false
197197
end
198198
end
199+
200+
with "collection transfer" do
201+
it "transfers array contents" do
202+
element_class = Class.new do
203+
async_safe!(false)
204+
def process; "done"; end
205+
end
206+
207+
elements = [element_class.new, element_class.new]
208+
elements.each(&:process)
209+
210+
Fiber.new do
211+
Async::Safe.transfer(elements)
212+
elements.each(&:process)
213+
end.resume
214+
end
215+
216+
it "transfers hash keys and values" do
217+
key_class = Class.new do
218+
async_safe!(false)
219+
def value; "key"; end
220+
end
221+
222+
value_class = Class.new do
223+
async_safe!(false)
224+
def process; "done"; end
225+
end
226+
227+
key = key_class.new
228+
value = value_class.new
229+
hash = {key => value}
230+
231+
key.value
232+
value.process
233+
234+
Fiber.new do
235+
Async::Safe.transfer(hash)
236+
hash.each {|k, v| k.value; v.process}
237+
end.resume
238+
end
239+
240+
it "transfers set elements" do
241+
element_class = Class.new do
242+
async_safe!(false)
243+
def process; "done"; end
244+
end
245+
246+
set = Set.new([element_class.new, element_class.new])
247+
set.each(&:process)
248+
249+
Fiber.new do
250+
Async::Safe.transfer(set)
251+
set.each(&:process)
252+
end.resume
253+
end
254+
end
199255
end
200256

0 commit comments

Comments
 (0)