mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-03-30 22:35:00 -05:00
130 lines
3.5 KiB
TypeScript
130 lines
3.5 KiB
TypeScript
import { describe, expect, it, test } from "vitest";
|
|
import {
|
|
averageArray,
|
|
cutToNDecimalPlaces,
|
|
roundToNDecimalPlaces,
|
|
safeNumberParse,
|
|
} from "./number";
|
|
|
|
describe("roundToNDecimalPlaces()", () => {
|
|
it("rounds to 2 decimal places by default", () => {
|
|
expect(roundToNDecimalPlaces(1.234)).toBe(1.23);
|
|
expect(roundToNDecimalPlaces(1.235)).toBe(1.24);
|
|
expect(roundToNDecimalPlaces(1.2)).toBe(1.2);
|
|
expect(roundToNDecimalPlaces(1)).toBe(1);
|
|
});
|
|
|
|
it("rounds to 0 decimal places", () => {
|
|
expect(roundToNDecimalPlaces(1.6, 0)).toBe(2);
|
|
expect(roundToNDecimalPlaces(1.4, 0)).toBe(1);
|
|
expect(roundToNDecimalPlaces(2.5, 0)).toBe(3);
|
|
});
|
|
|
|
it("rounds to 3 decimal places", () => {
|
|
expect(roundToNDecimalPlaces(1.23456, 3)).toBe(1.235);
|
|
expect(roundToNDecimalPlaces(1.23444, 3)).toBe(1.234);
|
|
});
|
|
|
|
it("handles negative numbers", () => {
|
|
expect(roundToNDecimalPlaces(-1.2345, 2)).toBe(-1.23);
|
|
expect(roundToNDecimalPlaces(-1.2355, 2)).toBe(-1.24);
|
|
});
|
|
|
|
it("handles zero", () => {
|
|
expect(roundToNDecimalPlaces(0, 2)).toBe(0);
|
|
expect(roundToNDecimalPlaces(0, 0)).toBe(0);
|
|
});
|
|
|
|
it("handles large numbers", () => {
|
|
expect(roundToNDecimalPlaces(123456.789, 1)).toBe(123456.8);
|
|
expect(roundToNDecimalPlaces(123456.789, 0)).toBe(123457);
|
|
});
|
|
});
|
|
|
|
describe("cutToNDecimalPlaces()", () => {
|
|
test("cutOff truncates decimal places correctly", () => {
|
|
const result = cutToNDecimalPlaces(3.9999, 2);
|
|
expect(result).toBe(3.99);
|
|
});
|
|
|
|
test("cutOff can change amount of decimals returned", () => {
|
|
const result = cutToNDecimalPlaces(3.12, 1);
|
|
expect(result).toBe(3.1);
|
|
});
|
|
|
|
test("cutOff preserves decimal values with the desired number of decimal places correctly", () => {
|
|
const result = cutToNDecimalPlaces(100, 2);
|
|
expect(result).toBe(100);
|
|
});
|
|
|
|
test("cutOff cuts off decimal places and removes trailing zeros correctly", () => {
|
|
const result = cutToNDecimalPlaces(3.0001, 2);
|
|
expect(result).toBe(3);
|
|
});
|
|
});
|
|
|
|
describe("averageArray()", () => {
|
|
it("returns the average of positive numbers", () => {
|
|
const result = averageArray([2, 4, 6, 8]);
|
|
expect(result).toBe(5);
|
|
});
|
|
|
|
it("returns the average of negative numbers", () => {
|
|
const result = averageArray([-2, -4, -6, -8]);
|
|
expect(result).toBe(-5);
|
|
});
|
|
|
|
it("returns the average of mixed positive and negative numbers", () => {
|
|
const result = averageArray([10, -10, 20, -20]);
|
|
expect(result).toBe(0);
|
|
});
|
|
|
|
it("returns the value itself for a single-element array", () => {
|
|
const result = averageArray([42]);
|
|
expect(result).toBe(42);
|
|
});
|
|
|
|
it("returns 0 for an empty array", () => {
|
|
const result = averageArray([]);
|
|
expect(result).toBe(0);
|
|
});
|
|
});
|
|
|
|
describe("safeNumberParse()", () => {
|
|
it("returns null for null input", () => {
|
|
expect(safeNumberParse(null)).toBeNull();
|
|
});
|
|
|
|
it("parses valid integer string", () => {
|
|
expect(safeNumberParse("42")).toBe(42);
|
|
});
|
|
|
|
it("parses valid float string", () => {
|
|
expect(safeNumberParse("3.14")).toBe(3.14);
|
|
});
|
|
|
|
it("returns null for non-numeric string", () => {
|
|
expect(safeNumberParse("abc")).toBeNull();
|
|
});
|
|
|
|
it("returns null for empty string", () => {
|
|
expect(safeNumberParse("")).toBeNull();
|
|
});
|
|
|
|
it("parses string with leading/trailing spaces", () => {
|
|
expect(safeNumberParse(" 7 ")).toBe(7);
|
|
});
|
|
|
|
it("parses negative numbers", () => {
|
|
expect(safeNumberParse("-123")).toBe(-123);
|
|
});
|
|
|
|
it("parses zero", () => {
|
|
expect(safeNumberParse("0")).toBe(0);
|
|
});
|
|
|
|
it("returns null for string with only spaces", () => {
|
|
expect(safeNumberParse(" ")).toBeNull();
|
|
});
|
|
});
|