import { toFiniteNumberWithDefault } from "..";

describe("toNumber", () => {
  const DEFAULT = 5;

  it("return number if input is number", () => {
    const inputs = [-1, 0, 1, 100];
    expect.assertions(inputs.length);

    inputs.forEach((input) => {
      const output = toFiniteNumberWithDefault(DEFAULT, input);
      expect(output).toBe(input);
    });
  });

  it("return number if input is string as number", () => {
    const inputs = ["-1", "0", "1", "100"];
    expect.assertions(inputs.length);

    inputs.forEach((input) => {
      const output = toFiniteNumberWithDefault(DEFAULT, input);
      expect(output).toBe(Number(input));
    });
  });

  it("return default if input is not a number or infinite", () => {
    const inputs = [
      "vfdvf",
      null,
      undefined,
      NaN,
      "",
      {},
      { test: 1 },
      [],
      [1],
      Infinity,
      -Infinity,
    ];

    expect.assertions(inputs.length);

    inputs.forEach((input) => {
      const output = toFiniteNumberWithDefault(DEFAULT, input);
      expect(output).toBe(DEFAULT);
    });
  });
});
