///|
pub fn abs(x : Double) -> Double {
  if x < 0.0 {
    -x
  } else {
    x
  }
}

///|
pub fn square(x : Double) -> Double {
  x * x
}

///|
pub fn almost_equal(
  a : Double,
  b : Double,
  eps? : Double = 0.000000001,
) -> Bool {
  abs(a - b) <= eps
}

///|
pub fn clamp(x : Double, lo~ : Double, hi~ : Double) -> Double {
  if x < lo {
    lo
  } else if x > hi {
    hi
  } else {
    x
  }
}