Class: Evilution::Runner

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config: Config.new) ⇒ Runner

Returns a new instance of Runner.



26
27
28
29
30
31
32
# File 'lib/evilution/runner.rb', line 26

def initialize(config: Config.new)
  @config = config
  @parser = AST::Parser.new
  @registry = Mutator::Registry.default
  @isolator = build_isolator
  @cache = config.incremental? ? Cache.new : nil
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



24
25
26
# File 'lib/evilution/runner.rb', line 24

def config
  @config
end

Instance Method Details

#callObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/evilution/runner.rb', line 34

def call
  start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)

  subjects = parse_subjects
  subjects = filter_by_target(subjects) if config.target?
  subjects = (subjects) if config.line_ranges?
  log_memory("after parse_subjects", "#{subjects.length} subjects")

  baseline_result = run_baseline(subjects)

  mutations = generate_mutations(subjects)
  equivalent_mutations, mutations = filter_equivalent(mutations)
  release_subject_nodes(subjects)
  results, truncated = run_mutations(mutations, baseline_result)
  results += equivalent_mutations.map do |m|
    m.strip_sources!
    equivalent_result(m)
  end
  log_memory("after run_mutations", "#{results.length} results")

  duration = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time

  summary = Result::Summary.new(results: results, duration: duration, truncated: truncated)
  output_report(summary)

  summary
end