158 lines
3.8 KiB
TypeScript
158 lines
3.8 KiB
TypeScript
import { describe, it, expect } from "vitest";
|
|
import * as Numbers from "../src/numbers";
|
|
|
|
describe("numbers", () => {
|
|
describe("roundTo1", () => {
|
|
it("should correctly round", () => {
|
|
const tests = [
|
|
{
|
|
in: 0.0,
|
|
out: 0,
|
|
},
|
|
{
|
|
in: 0.01,
|
|
out: 0.0,
|
|
},
|
|
{
|
|
in: 0.09,
|
|
out: 0.1,
|
|
},
|
|
{
|
|
in: 0.123,
|
|
out: 0.1,
|
|
},
|
|
{
|
|
in: 0.456,
|
|
out: 0.5,
|
|
},
|
|
{
|
|
in: 0.789,
|
|
out: 0.8,
|
|
},
|
|
];
|
|
|
|
tests.forEach((test) => {
|
|
expect(Numbers.roundTo1(test.in)).toBe(test.out);
|
|
});
|
|
});
|
|
|
|
it("mapRange", () => {
|
|
const testCases = [
|
|
{
|
|
input: {
|
|
value: 123,
|
|
inMin: 0,
|
|
inMax: 200,
|
|
outMin: 0,
|
|
outMax: 1000,
|
|
clamp: false,
|
|
},
|
|
expected: 615,
|
|
},
|
|
{
|
|
input: {
|
|
value: 123,
|
|
inMin: 0,
|
|
inMax: 200,
|
|
outMin: 1000,
|
|
outMax: 0,
|
|
clamp: false,
|
|
},
|
|
expected: 385,
|
|
},
|
|
{
|
|
input: {
|
|
value: 10001,
|
|
inMin: 0,
|
|
inMax: 10000,
|
|
outMin: 0,
|
|
outMax: 1000,
|
|
clamp: false,
|
|
},
|
|
expected: 1000.1,
|
|
},
|
|
{
|
|
input: {
|
|
value: 10001,
|
|
inMin: 0,
|
|
inMax: 10000,
|
|
outMin: 0,
|
|
outMax: 1000,
|
|
clamp: true,
|
|
},
|
|
expected: 1000,
|
|
},
|
|
];
|
|
|
|
testCases.forEach(({ input, expected }) => {
|
|
expect(
|
|
Numbers.mapRange(
|
|
input.value,
|
|
input.inMin,
|
|
input.inMax,
|
|
input.outMin,
|
|
input.outMax,
|
|
input.clamp,
|
|
),
|
|
).toEqual(expected);
|
|
});
|
|
});
|
|
});
|
|
describe("isSafeNumber", () => {
|
|
describe("should correctly identify safe numbers", () => {
|
|
const testCases = [
|
|
//safe
|
|
{ input: 0, expected: true },
|
|
{ input: 1, expected: true },
|
|
{ input: -1, expected: true },
|
|
{ input: 0.5, expected: true },
|
|
{ input: -0.5, expected: true },
|
|
//not safe
|
|
{ input: NaN, expected: false },
|
|
{ input: Infinity, expected: false },
|
|
{ input: -Infinity, expected: false },
|
|
{ input: "string", expected: false },
|
|
{ input: null, expected: false },
|
|
{ input: undefined, expected: false },
|
|
{ input: true, expected: false },
|
|
{ input: false, expected: false },
|
|
];
|
|
|
|
it.for(testCases)(
|
|
"should return $expected for $input",
|
|
({ input, expected }) => {
|
|
expect(Numbers.isSafeNumber(input)).toEqual(expected);
|
|
},
|
|
);
|
|
});
|
|
});
|
|
describe("safeNumber", () => {
|
|
describe("should correctly identify safe numbers", () => {
|
|
const testCases = [
|
|
//safe
|
|
{ input: 0, expected: 0 },
|
|
{ input: 1, expected: 1 },
|
|
{ input: -1, expected: -1 },
|
|
{ input: 0.5, expected: 0.5 },
|
|
{ input: -0.5, expected: -0.5 },
|
|
//not safe
|
|
{ input: NaN, expected: undefined },
|
|
{ input: Infinity, expected: undefined },
|
|
{ input: -Infinity, expected: undefined },
|
|
{ input: "string", expected: undefined },
|
|
{ input: null, expected: undefined },
|
|
{ input: undefined, expected: undefined },
|
|
{ input: true, expected: undefined },
|
|
{ input: false, expected: undefined },
|
|
];
|
|
|
|
it.for(testCases)(
|
|
"should return $expected for $input",
|
|
({ input, expected }) => {
|
|
expect(Numbers.safeNumber(input as number)).toEqual(expected);
|
|
},
|
|
);
|
|
});
|
|
});
|
|
});
|