Sha256: 515924df0d27e184c6ffc3d03d16a589019ddb9b236fad77d2f475bbb366d445

Contents?: true

Size: 903 Bytes

Versions: 14

Compression:

Stored size: 903 Bytes

Contents

# frozen_string_literal: true

require_relative 'subset'

module DeepCover
  class Analyser::Branch < Analyser
    def self.human_name
      'Branches'
    end
    include Analyser::Subset
    SUBSET_CLASSES = [Node::Branch].freeze

    def node_runs(node)
      runs = super
      if node.is_a?(Node::Branch) && covered?(runs)
        worst = worst_branch_runs(node)
        runs = worst unless covered?(worst)
      end
      runs
    end

    def results
      each_node.map do |node|
        branches_runs = node.branches.map { |jump| [jump, branch_runs(jump)] }.to_h
        [node, branches_runs]
      end.to_h
    end

    private

    def worst_branch_runs(fork)
      fork.branches.map { |jump| branch_runs(jump) }
          .min_by { |runs| runs == 0 ? -2 : runs || -1 }
    end

    def branch_runs(branch)
      branch.flow_entry_count.nonzero? || source.node_runs(branch)
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
deep-cover-core-1.1.0 lib/deep_cover/analyser/branch.rb
deep-cover-core-1.0.0 lib/deep_cover/analyser/branch.rb
deep-cover-core-0.8.1 lib/deep_cover/analyser/branch.rb
deep-cover-core-0.8.0 lib/deep_cover/analyser/branch.rb
deep-cover-core-0.7.10 lib/deep_cover/analyser/branch.rb
deep-cover-core-0.7.9 lib/deep_cover/analyser/branch.rb
deep-cover-core-0.7.8 lib/deep_cover/analyser/branch.rb
deep-cover-core-0.7.7 lib/deep_cover/analyser/branch.rb
deep-cover-core-0.7.6 lib/deep_cover/analyser/branch.rb
deep-cover-core-0.7.5 lib/deep_cover/analyser/branch.rb
deep-cover-core-0.7.4 lib/deep_cover/analyser/branch.rb
deep-cover-core-0.7.3 lib/deep_cover/analyser/branch.rb
deep-cover-core-0.7.2 lib/deep_cover/analyser/branch.rb
deep-cover-core-0.7.1 lib/deep_cover/analyser/branch.rb