UNPKG

number-as-string

Version:

Precise number scaling and formatting without JavaScript floating-point precision issues

40 lines (39 loc) 2.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const src_1 = require("../src"); describe("scaleDown", () => { test("should format scaled numbers from hex strings", () => { expect((0, src_1.scaleDown)("0xde0b6b3a7640000", 18)).toBe("1"); expect((0, src_1.scaleDown)("0x1bc16d674ec80000", 18)).toBe("2"); expect((0, src_1.scaleDown)("0x8ac7230489e80000", 18)).toBe("10"); expect((0, src_1.scaleDown)("0x56bc75e2d63100000", 18)).toBe("100"); expect((0, src_1.scaleDown)("0x3635c9adc5dea00000", 18)).toBe("1000"); expect((0, src_1.scaleDown)("0x21e19e0c9bab2400000", 18)).toBe("10000"); }); test("should handle BigInt inputs", () => { expect((0, src_1.scaleDown)(BigInt(1000000000000000000), 18)).toBe("1"); expect((0, src_1.scaleDown)(BigInt(2000000000000000000), 18)).toBe("2"); expect((0, src_1.scaleDown)(BigInt(10000000000000000000), 18)).toBe("10"); }); test("should handle number inputs", () => { expect((0, src_1.scaleDown)(1e18, 18)).toBe("1"); expect((0, src_1.scaleDown)(2e18, 18)).toBe("2"); expect((0, src_1.scaleDown)(10e18, 18)).toBe("10"); expect((0, src_1.scaleDown)(1.2e18, 18)).toBe("1.2"); expect((0, src_1.scaleDown)(1.23e18, 18)).toBe("1.23"); expect((0, src_1.scaleDown)(1.234e18, 18)).toBe("1.234"); expect((0, src_1.scaleDown)("1" + "0".repeat(18), 18)).toBe("1"); expect((0, src_1.scaleDown)("12" + "0".repeat(18), 18)).toBe("12"); expect((0, src_1.scaleDown)(123, 18)).toBe("0." + "123".padStart(18, "0")); expect((0, src_1.scaleDown)(123.4, 18)).toBe("0." + "1234".padStart(19, "0")); }); test("should handle scientific notation", () => { expect((0, src_1.scaleDown)("1.2e3", 2)).toBe("12"); expect((0, src_1.scaleDown)("1.2e-3", 5)).toBe("0.000000012"); }); test("should handle edge cases", () => { expect(() => (0, src_1.scaleDown)("Infinity", 2)).toThrow("Invalid scaledValue value"); expect(() => (0, src_1.scaleDown)("NaN", 2)).toThrow("Invalid scaledValue value"); expect(() => (0, src_1.scaleDown)("1.23", -1)).toThrow("Decimals must be a non-negative integer"); }); });