module Benchmark::Timing

def self.clean_env

Recycle used objects by starting Garbage Collector.
def self.clean_env
  # rbx
  if GC.respond_to? :run
    GC.run(true)
  else
    GC.start
  end
end

def self.mean(samples)

Returns:
  • (Float) - Mean of given samples.

Parameters:
  • samples (Array) -- Samples to calculate mean.
def self.mean(samples)
  sum = samples.inject(0) { |acc, i| acc + i }
  sum / samples.size
end

def self.resample_mean(samples, resample_times=100)

Returns:
  • (Array) - Resampled samples.

Parameters:
  • resample_times (Integer) -- Resample times, defaults to 100.
def self.resample_mean(samples, resample_times=100)
  resamples = []
  resample_times.times do
    resample = samples.map { samples[rand(samples.size)] }
    resamples << Timing.mean(resample)
  end
  resamples
end

def self.stddev(samples, m=nil)

Returns:
  • (Float) - standard deviation of given samples.

Parameters:
  • m (Float) -- Optional mean (Expected value).
  • samples (Array) -- Samples to calculate standard deviation.
def self.stddev(samples, m=nil)
  Math.sqrt variance(samples, m)
end

def self.variance(samples, m=nil)

Returns:
  • (Float) - Variance of given samples.

Parameters:
  • m (Float) -- Optional mean (Expected value).
def self.variance(samples, m=nil)
  m ||= mean(samples)
  total = samples.inject(0) { |acc, i| acc + ((i - m) ** 2) }
  total / samples.size
end