bf96303bf9
AI-Assisted: yes AI-Tool: OpenAI Codex / gpt-5.5 xhigh
60 lines
2.1 KiB
TypeScript
60 lines
2.1 KiB
TypeScript
import { describe, expect, test } from 'bun:test'
|
|
import { clamp } from '../src/util'
|
|
|
|
describe('utils', () => {
|
|
describe('clamp', () => {
|
|
test("doesn't alter integers within the given range", () => {
|
|
expect(clamp(5, { min: 0, max: 10 })).toBe(5)
|
|
expect(clamp(-8, { min: -100, max: 100 })).toBe(-8)
|
|
})
|
|
|
|
test('keeps values at the range boundaries', () => {
|
|
expect(clamp(0, { min: 0, max: 10 })).toBe(0)
|
|
expect(clamp(10, { min: 0, max: 10 })).toBe(10)
|
|
expect(clamp(-100, { min: -100, max: 100 })).toBe(-100)
|
|
expect(clamp(100, { min: -100, max: 100 })).toBe(100)
|
|
})
|
|
|
|
test('raises values below the minimum', () => {
|
|
expect(clamp(-1, { min: 0, max: 10 })).toBe(0)
|
|
expect(clamp(-101, { min: -100, max: 100 })).toBe(-100)
|
|
})
|
|
|
|
test('lowers values above the maximum', () => {
|
|
expect(clamp(11, { min: 0, max: 10 })).toBe(10)
|
|
expect(clamp(101, { min: -100, max: 100 })).toBe(100)
|
|
})
|
|
|
|
test('floors floats by default', () => {
|
|
expect(clamp(1.5, { min: 0, max: 2 })).toBe(1)
|
|
expect(clamp(1.999, { min: 0, max: 2 })).toBe(1)
|
|
expect(clamp(-0.3, { min: -2, max: 2 })).toBe(-1)
|
|
expect(clamp(-1.1, { min: -2, max: 2 })).toBe(-2)
|
|
})
|
|
|
|
test('floors before applying bounds', () => {
|
|
expect(clamp(10.5, { min: 0, max: 10 })).toBe(10)
|
|
expect(clamp(-10.5, { min: -10, max: 10 })).toBe(-10)
|
|
expect(clamp(1.2, { min: 1.5 })).toBe(1.5)
|
|
})
|
|
|
|
test('preserves floats when allowed', () => {
|
|
expect(clamp(1.5, { min: 0, max: 2 }, true)).toBe(1.5)
|
|
expect(clamp(2.5, { min: 0, max: 2 }, true)).toBe(2)
|
|
expect(clamp(-0.5, { min: 0, max: 2 }, true)).toBe(0)
|
|
})
|
|
|
|
test('supports one-sided bounds', () => {
|
|
expect(clamp(-1, { min: 0 })).toBe(0)
|
|
expect(clamp(11, { min: 0 })).toBe(11)
|
|
expect(clamp(-1, { max: 10 })).toBe(-1)
|
|
expect(clamp(11, { max: 10 })).toBe(10)
|
|
})
|
|
|
|
test('clamps infinite values to the range boundaries', () => {
|
|
expect(clamp(Infinity, { min: 0, max: 10 })).toBe(10)
|
|
expect(clamp(-Infinity, { min: 0, max: 10 })).toBe(0)
|
|
})
|
|
})
|
|
})
|