File tree Expand file tree Collapse file tree 1 file changed +56
-0
lines changed Expand file tree Collapse file tree 1 file changed +56
-0
lines changed Original file line number Diff line number Diff 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
199255end
200256
You can’t perform that action at this time.
0 commit comments