Sha256: 9c9fb42810eaf43974976b6646cd0fcdae76bd4d3d2ce8e8ad31b9b673d2663a

Contents?: true

Size: 1.68 KB

Versions: 10

Compression:

Stored size: 1.68 KB

Contents

module LabTech
  class Speedup
    attr_reader :baseline, :comparison, :time, :factor

    def self.compute_time_delta(baseline, comparison)
      return nil if baseline.nil?
      return nil if comparison.nil?

      baseline.to_f - comparison.to_f
    end

    def self.compute_factor(baseline, comparison)
      # Timing data should never be zero
      return nil if [ baseline, comparison ].any? { |e| e.to_f.zero? }

      time = compute_time_delta(baseline, comparison)
      return nil if time.nil?

      case
      when time > 0   ; +1 * baseline   / comparison
      when time.zero? ;  0
      when time < 0   ; -1 * comparison / baseline
      end
    end

    def initialize(baseline: nil, comparison: nil, time: nil, factor: nil)
      @baseline   = baseline   &.to_f
      @comparison = comparison &.to_f
      @time       = time       &.to_f || compute_time_delta
      @factor     = factor     &.to_f || compute_factor
    end

    include Comparable
    def <=>(other)
      return nil unless other.kind_of?(self.class)
      return nil   if self .factor.nil?
      return other if other.factor.nil?

      self.factor <=> other.factor
    end

    def valid?
      return false if time.nil?
      return false if factor.nil?

      expected_time_delta = compute_time_delta
      expected_factor     = compute_factor

      return false if expected_time_delta && ( time   != expected_time_delta )
      return false if expected_factor     && ( factor != expected_factor     )

      true
    end

    private

    def compute_time_delta
      self.class.compute_time_delta(baseline, comparison)
    end

    def compute_factor
      self.class.compute_factor(baseline, comparison)
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
lab_tech-0.1.9 app/models/lab_tech/speedup.rb
lab_tech-0.1.8 app/models/lab_tech/speedup.rb
lab_tech-0.1.7 app/models/lab_tech/speedup.rb
lab_tech-0.1.6 app/models/lab_tech/speedup.rb
lab_tech-0.1.5 app/models/lab_tech/speedup.rb
lab_tech-0.1.4 app/models/lab_tech/speedup.rb
lab_tech-0.1.3 app/models/lab_tech/speedup.rb
lab_tech-0.1.2 app/models/lab_tech/speedup.rb
lab_tech-0.1.1 app/models/lab_tech/speedup.rb
lab_tech-0.1.0 app/models/lab_tech/speedup.rb