a19f3b1691
* I do not use 1.9.3 * Also keeping them in each file increases mental overhead (true it *can* be autoamted) * None of the files encodes NON ASCII chars. * I do not expect it makes any difference, since nobody programmatically will consume strings generated by mutant under the assumption they are UTF-8 encoded. * 1.9.3 Users have to deal with the encoding fuckup under ruby anyways.
56 lines
1 KiB
Ruby
56 lines
1 KiB
Ruby
module Mutant
|
|
class Mutator
|
|
class Node
|
|
# Mutation emitter to handle binary connectives
|
|
class Binary < self
|
|
|
|
INVERSE = {
|
|
and: :or,
|
|
or: :and
|
|
}.freeze
|
|
|
|
handle(*INVERSE.keys)
|
|
|
|
children :left, :right
|
|
|
|
private
|
|
|
|
# Emit mutations
|
|
#
|
|
# @return [undefined]
|
|
#
|
|
# @api private
|
|
#
|
|
def dispatch
|
|
emit_singletons
|
|
emit(left)
|
|
emit(right)
|
|
mutate_operator
|
|
mutate_operands
|
|
end
|
|
|
|
# Emit operator mutations
|
|
#
|
|
# @return [undefined]
|
|
#
|
|
# @api private
|
|
#
|
|
def mutate_operator
|
|
emit(s(INVERSE.fetch(node.type), left, right))
|
|
end
|
|
|
|
# Emit condition mutations
|
|
#
|
|
# @return [undefined]
|
|
#
|
|
# @api private
|
|
#
|
|
def mutate_operands
|
|
emit(s(node.type, n_not(left), right))
|
|
emit(n_not(node))
|
|
end
|
|
|
|
end # Binary
|
|
end # Node
|
|
end # Mutator
|
|
end # Mutant
|