module Sass::Value::FuzzyMath

def assert_between(number, min, max, name)

def assert_between(number, min, max, name)
  result = between(number, min, max)
  return result unless result.nil?
  message = "#{number} must be between #{min} and #{max}."
  raise Sass::ScriptError, name.nil? ? message : "$#{name}: #{message}"
end

def between(number, min, max)

def between(number, min, max)
  return min if equals(number, min)
  return max if equals(number, max)
  return number if number > min && number < max
  nil
end

def equals(number1, number2)

def equals(number1, number2)
  (number1 - number2).abs < EPSILON
end

def greater_than(number1, number2)

def greater_than(number1, number2)
  number1 > number2 && !equals(number1, number2)
end

def greater_than_or_equals(number1, number2)

def greater_than_or_equals(number1, number2)
  number1 > number2 || equals(number1, number2)
end

def hash(number)

def hash(number)
  @hash ||= if number.finite?
              (number * INVERSE_EPSILON).round.hash
            else
              number.hash
            end
end

def integer?(number)

def integer?(number)
  return false unless number.finite?
  return true if number.integer?
  equals((number - 0.5).abs % 1, 0.5)
end

def less_than(number1, number2)

def less_than(number1, number2)
  number1 < number2 && !equals(number1, number2)
end

def less_than_or_equals(number1, number2)

def less_than_or_equals(number1, number2)
  number1 < number2 || equals(number1, number2)
end

def round(number)

def round(number)
  if number.positive?
    less_than(number % 1, 0.5) ? number.floor : number.ceil
  else
    less_than_or_equals(number % 1, 0.5) ? number.floor : number.ceil
  end
end

def to_i(number)

def to_i(number)
  integer?(number) ? number.round : nil
end