Class: LabTech::Speedup

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
app/models/lab_tech/speedup.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(baseline: nil, comparison: nil, time: nil, factor: nil) ⇒ Speedup

Returns a new instance of Speedup.



26
27
28
29
30
31
# File 'app/models/lab_tech/speedup.rb', line 26

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

Instance Attribute Details

#baselineObject (readonly)

Returns the value of attribute baseline.



3
4
5
# File 'app/models/lab_tech/speedup.rb', line 3

def baseline
  @baseline
end

#comparisonObject (readonly)

Returns the value of attribute comparison.



3
4
5
# File 'app/models/lab_tech/speedup.rb', line 3

def comparison
  @comparison
end

#factorObject (readonly)

Returns the value of attribute factor.



3
4
5
# File 'app/models/lab_tech/speedup.rb', line 3

def factor
  @factor
end

#timeObject (readonly)

Returns the value of attribute time.



3
4
5
# File 'app/models/lab_tech/speedup.rb', line 3

def time
  @time
end

Class Method Details

.compute_factor(baseline, comparison) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'app/models/lab_tech/speedup.rb', line 12

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

.compute_time_delta(baseline, comparison) ⇒ Object



5
6
7
8
9
10
# File 'app/models/lab_tech/speedup.rb', line 5

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

  baseline.to_f - comparison.to_f
end

Instance Method Details

#<=>(other) ⇒ Object



34
35
36
37
38
39
40
# File 'app/models/lab_tech/speedup.rb', line 34

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

#valid?Boolean

Returns:

  • (Boolean)


42
43
44
45
46
47
48
49
50
51
52
53
# File 'app/models/lab_tech/speedup.rb', line 42

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