Class: Kaisoku::Evaluator::MutationSeeder

Inherits:
Object
  • Object
show all
Defined in:
lib/kaisoku/evaluator/mutation_seeder.rb

Defined Under Namespace

Classes: Mutation

Constant Summary collapse

PATTERNS =
{
  'true' => 'false',
  'false' => 'true',
  'nil' => 'false'
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(paths:, command:, limit: 10) ⇒ MutationSeeder

Returns a new instance of MutationSeeder.



16
17
18
19
20
# File 'lib/kaisoku/evaluator/mutation_seeder.rb', line 16

def initialize(paths:, command:, limit: 10)
  @paths = Array(paths)
  @command = command
  @limit = limit.to_i
end

Instance Method Details

#mutationsObject



32
33
34
# File 'lib/kaisoku/evaluator/mutation_seeder.rb', line 32

def mutations
  ruby_files.flat_map { |file| mutations_for_file(file) }
end

#mutations_for_source(file, source) ⇒ Object



36
37
38
39
40
41
42
# File 'lib/kaisoku/evaluator/mutation_seeder.rb', line 36

def mutations_for_source(file, source)
  PATTERNS.flat_map do |original, replacement|
    source.enum_for(:scan, /\b#{Regexp.escape(original)}\b/).map do
      Mutation.new(file: file, original: original, replacement: replacement, index: Regexp.last_match.begin(0))
    end
  end
end

#reportObject



26
27
28
29
30
# File 'lib/kaisoku/evaluator/mutation_seeder.rb', line 26

def report
  results = run
  killed = results.count { |result| result[:killed] }
  "Mutation score: #{killed}/#{results.length}"
end

#runObject



22
23
24
# File 'lib/kaisoku/evaluator/mutation_seeder.rb', line 22

def run
  mutations.first(@limit).map { |mutation| evaluate(mutation) }
end