class CloseAssay

Relative approximation, sometimes refered to as *within epsilon*.

Public Class Methods

assert_message(subject, criterion, delta) click to toggle source

Failed assertion message.

# File lib/assay/close_assay.rb, line 29
def self.assert_message(subject, criterion, delta)
  a = subject.inspect
  b = criterion.inspect
  e = delta.inspect

  if [a, b, e].any?{ |e| e.to_s.size > SIZE_LIMIT }
    "b(1 - e) <= a <= b(1 + e)\na) #{a}\nb) #{b}\nd) #{d}"
  else
    "#{b}(1 - #{e}) <= #{a} <= #{b}(1 + #{e})"
  end
end
pass?(subject, criterion, epsilon) click to toggle source

Check assertion.

# File lib/assay/close_assay.rb, line 12
def self.pass?(subject, criterion, epsilon)
  #if [subject, criterion, epsilon].all?{ |v| Numeric === v }
    a, b, e = subject.to_f, criterion.to_f, epsilon.to_f
  #else
  #  a, b, e = subject, criterion, epsilon
  #end

  #(a - b).abs / [a.abs, b.abs].max <= e
  
  d = b * e   # [a.abs,b.abs].max * e

  (b - d) <= a && (b + d) >= a
end