Class: SplitTestRb::Balancer
- Inherits:
-
Object
- Object
- SplitTestRb::Balancer
- Defined in:
- lib/split_test_rb.rb
Overview
Balances test files across multiple nodes using greedy algorithm
Class Method Summary collapse
-
.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.
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 |