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;
}