Class: SplitTestRb::Balancer

Inherits:
Object
  • Object
show all
Defined in:
lib/split_test_rb.rb

Overview

Balances test files across multiple nodes using greedy algorithm

Class Method Summary collapse

Class Method Details

.balance(timings, total_nodes) ⇒ Object

Distributes test files across nodes based on execution times Uses greedy algorithm: assign each file to the node with lowest cumulative time



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/split_test_rb.rb', line 123

def self.balance(timings, total_nodes)
  # Sort files by execution time (descending) for better balance
  sorted_files = timings.sort_by { |_file, time| -time }

  # Initialize nodes with empty arrays and zero cumulative time
  nodes = Array.new(total_nodes) { { files: [], total_time: 0 } }

  # Assign each file to the node with lowest cumulative time
  sorted_files.each do |file, time|
    # Find node with minimum total time
    min_node = nodes.min_by { |node| node[:total_time] }
    min_node[:files] << file
    min_node[:total_time] += time
  end

  nodes
end