module NPlusOneControl::MinitestHelper
Minitest assertions
Public Instance Methods
assert_perform_constant_number_of_queries( populate: nil, matching: nil, scale_factors: nil, warmup: nil ) { || ... }
click to toggle source
# File lib/n_plus_one_control/minitest.rb, line 8 def assert_perform_constant_number_of_queries( populate: nil, matching: nil, scale_factors: nil, warmup: nil ) raise ArgumentError, "Block is required" unless block_given? warming_up warmup @executor = NPlusOneControl::Executor.new( population: populate || population_method, matching: matching || NPlusOneControl.default_matching, scale_factors: scale_factors || NPlusOneControl.default_scale_factors ) queries = @executor.call { yield } counts = queries.map(&:last).map(&:size) assert counts.max == counts.min, NPlusOneControl.failure_message(:constant_queries, queries) end
assert_perform_linear_number_of_queries( slope: 1, populate: nil, matching: nil, scale_factors: nil, warmup: nil ) { || ... }
click to toggle source
# File lib/n_plus_one_control/minitest.rb, line 32 def assert_perform_linear_number_of_queries( slope: 1, populate: nil, matching: nil, scale_factors: nil, warmup: nil ) raise ArgumentError, "Block is required" unless block_given? warming_up warmup @executor = NPlusOneControl::Executor.new( population: populate || population_method, matching: matching || NPlusOneControl.default_matching, scale_factors: scale_factors || NPlusOneControl.default_scale_factors ) queries = @executor.call { yield } assert linear?(queries, slope: slope), NPlusOneControl.failure_message(:linear_queries, queries) end
current_scale()
click to toggle source
# File lib/n_plus_one_control/minitest.rb, line 55 def current_scale @executor&.current_scale end
Private Instance Methods
linear?(queries, slope:)
click to toggle source
# File lib/n_plus_one_control/minitest.rb, line 69 def linear?(queries, slope:) queries.each_cons(2).all? do |pair| scales = pair.map(&:first) query_lists = pair.map(&:last) actual_slope = (query_lists[1].size - query_lists[0].size) / (scales[1] - scales[0]) actual_slope <= slope end end
population_method()
click to toggle source
# File lib/n_plus_one_control/minitest.rb, line 65 def population_method methods.include?(:populate) ? method(:populate) : nil end
warming_up(warmup)
click to toggle source
# File lib/n_plus_one_control/minitest.rb, line 61 def warming_up(warmup) (warmup || methods.include?(:warmup) ? method(:warmup) : nil)&.call end