-
Notifications
You must be signed in to change notification settings - Fork 555
/
parallel.rb
40 lines (35 loc) · 985 Bytes
/
parallel.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
module Minitest
module Parallel
class Executor
attr_reader :size
def initialize size
@size = size
@queue = Queue.new
@pool = size.times.map {
Thread.new(@queue) do |queue|
Thread.current.abort_on_exception = true
while job = queue.pop
klass, method, reporter = job
result = Minitest.run_one_method klass, method
reporter.synchronize { reporter.record result }
end
end
}
end
def << work; @queue << work; end
def shutdown
size.times { @queue << nil }
@pool.each(&:join)
end
end
module Test
def _synchronize; Test.io_lock.synchronize { yield }; end
module ClassMethods
def run_one_method klass, method_name, reporter
Minitest.parallel_executor << [klass, method_name, reporter]
end
def test_order; :parallel; end
end
end
end
end