lib/simplecov/combine/branches_combiner.rb
# frozen_string_literal: true
module SimpleCov
module Combine
#
# Combine different branch coverage results on single file.
#
# Should be called through `SimpleCov.combine`.
module BranchesCombiner
module_function
#
# Return merged branches or the existed brach if other is missing.
#
# Branches inside files are always same if they exist, the difference only in coverage count.
# Branch coverage report for any conditional case is built from hash, it's key is a condition and
# it's body is a hash << keys from condition and value is coverage rate >>.
# ex: branches =>{ [:if, 3, 8, 6, 8, 36] => {[:then, 4, 8, 6, 8, 12] => 1, [:else, 5, 8, 6, 8, 36]=>2}, other conditions...}
# We create copy of result and update it values depending on the combined branches coverage values.
#
# @return [Hash]
#
def combine(coverage_a, coverage_b)
coverage_a.merge(coverage_b) do |_condition, branches_inside_a, branches_inside_b|
branches_inside_a.merge(branches_inside_b) do |_branch, a_count, b_count|
a_count + b_count
end
end
end
end
end
end