Ship

Files · src/Numbers.shp

src/Numbers.shp

examples/003-utility-functionsRaw
123456789101112131415161718192021222324252627
let clampclamp: pure fn!(value: Int, minimum: Int, maximum: Int) -> Int = fn(valuevalue: Int, minimumminimum: Int, maximummaximum: Int) {
  if valuevalue: Int < minimumminimum: Int {
    return minimumminimum: Int;
  }
  if valuevalue: Int > maximummaximum: Int {
    return maximummaximum: Int;
  }
  valuevalue: Int
};

let distancedistance: pure fn!(left: Int, right: Int) -> Int = fn(leftleft: Int, rightright: Int) {
  if leftleft: Int < rightright: Int {
    | rightright: Int - leftleft: Int
    | leftleft: Int - rightright: Int
  }
};

test "clamp keeps values inside the range" {
  expect clampclamp: pure fn!(value: Int, minimum: Int, maximum: Int) -> Int(22: Int, 33: Int, 88: Int) == 33: Int;
  expect clampclamp: pure fn!(value: Int, minimum: Int, maximum: Int) -> Int(55: Int, 33: Int, 88: Int) == 55: Int;
  expect clampclamp: pure fn!(value: Int, minimum: Int, maximum: Int) -> Int(1111: Int, 33: Int, 88: Int) == 88: Int;
}

test "distance is independent of order" {
  expect distancedistance: pure fn!(left: Int, right: Int) -> Int(44: Int, 1010: Int) == 66: Int;
  expect distancedistance: pure fn!(left: Int, right: Int) -> Int(1010: Int, 44: Int) == 66: Int;
}