class TestProf::RSpecDissect::Collectors::Base

def <<(data)

def <<(data)
  results << data
end

def initialize(name:, top_count:)

def initialize(name:, top_count:)
  @name = name
  @top_count = top_count
  @results = Utils::SizedOrderedSet.new(
    top_count, sort_by: name
  )
end

def populate!(data)

def populate!(data)
  data[name] = RSpecDissect.time_for(name)
end

def print_group_result(group)

def print_group_result(group)
  <<~GROUP
    #{group[:desc].truncate} (#{group[:loc]}) – #{group[name].duration} of #{group[:total].duration} (#{group[:count]})
  GROUP
end

def print_name

def print_name
  name
end

def print_result_header

def print_result_header
  <<~MSG
    Top #{top_count} slowest suites (by `#{print_name}` time):
  MSG
end

def print_results

def print_results
  msgs = [print_result_header]
  results.each do |group|
    msgs << print_group_result(group)
  end
  msgs.join
end

def total_time

def total_time
  RSpecDissect.total_time_for(name)
end

def total_time_message

def total_time_message
  "\nTotal `#{print_name}` time: #{total_time.duration}"
end