import { expect, test } from "vitest" import { between, constrainNumber, isEven, isOdd, maxOf, maxTo, minOf, minTo, normalize, randomBetween, randomIntBetween, } from "#Source/basic/index.ts" test("normalize scales values to 0-1 and validates ranges", () => { expect(normalize(5, 0, 10)).toBe(0.5) expect(normalize(2, 2, 6)).toBe(0) expect(() => normalize(1, 2, 2)).toThrow("Min and max value are the same.") expect(() => normalize(12, 0, 10)).toThrow("Value 12 is not in the range of 0 to 10.") }) test("isEven returns expected values", () => { expect(isEven(10)).toBe(true) expect(isEven(7)).toBe(false) }) test("isOdd returns expected values", () => { expect(isOdd(7)).toBe(true) expect(isOdd(10)).toBe(false) }) test("maxTo clamps values", () => { expect(maxTo(5, 10)).toBe(5) expect(maxTo(5, 3)).toBe(3) }) test("minTo clamps values", () => { expect(minTo(5, 3)).toBe(5) expect(minTo(5, 8)).toBe(8) }) test("minOf returns expected values", () => { expect(minOf(2, 9)).toBe(2) expect(minOf(5, -1)).toBe(-1) }) test("maxOf returns expected values", () => { expect(maxOf(2, 9)).toBe(9) expect(maxOf(5, -1)).toBe(5) }) test("between clamps to provided bounds", () => { expect(between(0, 10, 5)).toBe(5) expect(between(0, 10, -3)).toBe(0) expect(between(10, 0, 12)).toBe(10) }) test("randomBetween returns inclusive values", () => { expect(randomBetween(4, 4)).toBe(4) expect(randomBetween(10, 10)).toBe(10) }) test("randomIntBetween returns inclusive values regardless of order", () => { expect(randomIntBetween(4, 4)).toBe(4) expect(randomIntBetween(10, 10)).toBe(10) }) test("constrainNumber applies step and bounds", () => { expect(constrainNumber(12, { step: 5, max: 10 })).toBe(10) expect(constrainNumber(2.6, { step: 0.5, min: 3 })).toBe(3) expect(constrainNumber(7, { min: 2, max: 9 })).toBe(7) })