// 여러 core 모듈이 쓰는 정수 범위 가두기와 배열 사본 도우미를 둡니다.
// 범위가두기는 정수를 [하한, 상한] 으로 가두고, 복사추가는 원본을 그대로 둔 새 배열에 원소 하나를 붙여 돌려줍니다.
// 순수 함수라 같은 인자는 늘 같은 결과입니다.
// 인자 배열을 바꾸지 않습니다. 한쪽 경계만 가둘 때는 표준 atLeast, atMost 를 씁니다.
// Shared core utilities: integer range clamping and copy-then-append.

// 하한을 먼저 보므로 하한이 상한보다 크면 하한보다 작은 값은 하한, 나머지는 상한이 됩니다.
export function 범위가두기(값: int, 하한: int, 상한: int) -> int {
  if 값 < 하한 { 하한 } else { 값.atMost(상한) }
}

// 배열은 참조로 공유되므로 사본에 붙여 호출자의 배열을 건드리지 않습니다.
export function 복사추가<T>(원본: Array<T>, 추가: T) -> Array<T> {
  let mut 결과 = 원본.slice(0, 원본.length)
  결과.push(추가)
  결과
}
