Class: Pbt::Runner

Inherits:
Object
  • Object
show all
Defined in:
lib/pbt/runner.rb

Instance Method Summary collapse

Constructor Details

#initialize(generator, &block) ⇒ Runner

Returns a new instance of Runner.



9
10
11
12
# File 'lib/pbt/runner.rb', line 9

def initialize(generator, &block)
  @generator = generator
  @block = block
end

Instance Method Details

#runObject

Raises:



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
# File 'lib/pbt/runner.rb', line 14

def run
  cases = []
  CASE_COUNT.times do
    val = @generator.call
    ractor = Ractor.new(val, &@block)
    cases << Case.new(val:, ractor:, exception: nil)
  end

  failures = []
  cases.each do |c|
    c.ractor.take
  rescue => e
    failures << c.with(exception: e.cause)
  end

  message = []
  failures.group_by { _1.exception.class }.each do |exception_class, failures|
    message << <<~EOS
      #{exception_class}:
        Failed on:
          #{failures.map(&:val).join("\n    ")}
    EOS
  end

  raise CaseFailure, message.join("\n") if failures.size > 0
end