module Sass::Value::FuzzyMath
def _clamp_like_css(number, lower_bound, upper_bound)
def _clamp_like_css(number, lower_bound, upper_bound) number.to_f.nan? ? lower_bound : number.clamp(lower_bound, upper_bound) end
def _hash(number)
def _hash(number) number&.finite? ? (number * INVERSE_EPSILON).round : number end
def assert_between(number, min, max, name)
def assert_between(number, min, max, name) result = between(number, min, max) return result unless result.nil? raise Sass::ScriptError.new("#{number} must be between #{min} and #{max}.", name) 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) return true if number1 == number2 (number1 - number2).abs <= EPSILON && (number1 * INVERSE_EPSILON).round == (number2 * INVERSE_EPSILON).round end
def equals_nilable(number1, number2)
def equals_nilable(number1, number2) return true if number1 == number2 return false if number1.nil? || number2.nil? (number1 - number2).abs <= EPSILON && (number1 * INVERSE_EPSILON).round == (number2 * INVERSE_EPSILON).round 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 integer?(number)
def integer?(number) return false unless number.finite? equals(number, number.round) 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 to_i(number)
def to_i(number) integer?(number) ? number.round : nil end