Sha256: 1e5868469167bea87d1eff4b137f09ee7cfea97f5dc704e23a2a729a6926d6ce

Contents?: true

Size: 1.18 KB

Versions: 2

Compression:

Stored size: 1.18 KB

Contents

# encoding: utf-8

module Mutant
  class Mutator
    class Node
      module Connective

        # Mutation emitter to handle binary connectives
        class Binary < Node

          INVERSE = {
            :and => :or,
            :or  => :and,
          }.freeze

          handle(*INVERSE.keys)

          children :left, :right

        private

          # Emit mutations
          #
          # @return [undefined]
          #
          # @api private
          #
          def dispatch
            emit_nil
            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 # Connective
    end # Node
  end # Mutator
end # Mutant

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mutant-0.3.0.rc1 lib/mutant/mutator/node/connective/binary.rb
mutant-0.3.0.beta22 lib/mutant/mutator/node/connective/binary.rb