@quantara/sdk
Version:
JavaScript/TypeScript SDK for interacting with Quantara Protocol on Neura Testnet
309 lines (308 loc) • 23.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const vitest_1 = require("vitest");
const factors_1 = require("../../configs/factors");
const ONE_USD = 1000000000000000000000000000000n;
const numbers_1 = require("../numbers");
(0, vitest_1.describe)("numbers utils", () => {
(0, vitest_1.it)("constants", () => {
// Just to confirm they exist and have no unexpected changes
(0, vitest_1.expect)(numbers_1.PRECISION).toBe((0, numbers_1.expandDecimals)(1, 30));
(0, vitest_1.expect)(numbers_1.BN_ZERO).toBe(0n);
(0, vitest_1.expect)(numbers_1.BN_ONE).toBe(1n);
(0, vitest_1.expect)(numbers_1.BN_NEGATIVE_ONE).toBe(-1n);
});
(0, vitest_1.describe)("expandDecimals", () => {
(0, vitest_1.it)("multiplies by 10^decimals", () => {
(0, vitest_1.expect)((0, numbers_1.expandDecimals)(1, 0)).toBe(1n);
(0, vitest_1.expect)((0, numbers_1.expandDecimals)(1, 1)).toBe(10n);
(0, vitest_1.expect)((0, numbers_1.expandDecimals)(1, 2)).toBe(100n);
(0, vitest_1.expect)((0, numbers_1.expandDecimals)(5, 3)).toBe(5000n);
});
(0, vitest_1.it)("handles zero gracefully", () => {
(0, vitest_1.expect)((0, numbers_1.expandDecimals)(0, 5)).toBe(0n);
});
});
(0, vitest_1.describe)("basisPointsToFloat", () => {
(0, vitest_1.it)("converts basis points to scaled big int float using PRECISION", () => {
const result = (0, numbers_1.basisPointsToFloat)(100n);
(0, vitest_1.expect)(result).toBe((0, numbers_1.expandDecimals)(1, 28));
});
});
(0, vitest_1.describe)("getBasisPoints", () => {
(0, vitest_1.it)("calculates basis points as (numerator * 10000) / denominator", () => {
(0, vitest_1.expect)((0, numbers_1.getBasisPoints)(2n, 1n)).toBe(2n * factors_1.BASIS_POINTS_DIVISOR_BIGINT);
(0, vitest_1.expect)((0, numbers_1.getBasisPoints)(1n, 2n)).toBe(5000n);
});
(0, vitest_1.it)("rounds up if remainder != 0 and shouldRoundUp=true", () => {
(0, vitest_1.expect)((0, numbers_1.getBasisPoints)(7n, 3n, true)).toBe(23334n);
});
(0, vitest_1.it)("returns same result if remainder=0, even if shouldRoundUp=true", () => {
(0, vitest_1.expect)((0, numbers_1.getBasisPoints)(2n, 1n, true)).toBe(20000n);
});
});
(0, vitest_1.describe)("roundUpMagnitudeDivision", () => {
(0, vitest_1.it)("rounds positive numbers up", () => {
(0, vitest_1.expect)((0, numbers_1.roundUpMagnitudeDivision)(10n, 3n)).toBe(4n);
(0, vitest_1.expect)((0, numbers_1.roundUpMagnitudeDivision)(9n, 3n)).toBe(3n);
});
(0, vitest_1.it)("rounds negative numbers up in magnitude", () => {
(0, vitest_1.expect)((0, numbers_1.roundUpMagnitudeDivision)(-10n, 3n)).toBe(-4n);
});
});
(0, vitest_1.describe)("applyFactor", () => {
(0, vitest_1.it)("applies factor by (value * factor)/PRECISION", () => {
const value = (0, numbers_1.expandDecimals)(100, 30);
const factor = 200n;
(0, vitest_1.expect)((0, numbers_1.applyFactor)(value, factor)).toBe(20000n);
});
});
(0, vitest_1.it)("bigintToNumber", () => {
(0, vitest_1.expect)((0, numbers_1.bigintToNumber)(0n, 30)).toEqual(0);
(0, vitest_1.expect)((0, numbers_1.bigintToNumber)(1n, 30)).toEqual(1e-30);
(0, vitest_1.expect)((0, numbers_1.bigintToNumber)(numbers_1.PRECISION, 30)).toEqual(1);
(0, vitest_1.expect)((0, numbers_1.bigintToNumber)(numbers_1.PRECISION * 100n, 30)).toEqual(100);
(0, vitest_1.expect)((0, numbers_1.bigintToNumber)(numbers_1.PRECISION * 2n, 30)).toEqual(2);
(0, vitest_1.expect)((0, numbers_1.bigintToNumber)(numbers_1.PRECISION / 2n, 30)).toEqual(0.5);
(0, vitest_1.expect)((0, numbers_1.bigintToNumber)(1123456n, 6)).toEqual(1.123456);
(0, vitest_1.expect)((0, numbers_1.bigintToNumber)(-1123456n, 6)).toEqual(-1.123456);
});
(0, vitest_1.it)("numberToBigint", () => {
(0, vitest_1.expect)((0, numbers_1.numberToBigint)(0, 30)).toEqual(0n);
(0, vitest_1.expect)((0, numbers_1.numberToBigint)(1e-30, 30)).toEqual(1n);
(0, vitest_1.expect)((0, numbers_1.numberToBigint)(-1e-30, 30)).toEqual(-1n);
(0, vitest_1.expect)((0, numbers_1.numberToBigint)(1, 30)).toEqual(numbers_1.PRECISION);
(0, vitest_1.expect)((0, numbers_1.numberToBigint)(100, 30)).toEqual(numbers_1.PRECISION * 100n);
(0, vitest_1.expect)((0, numbers_1.numberToBigint)(2, 30)).toEqual(numbers_1.PRECISION * 2n);
(0, vitest_1.expect)((0, numbers_1.numberToBigint)(0.5, 30)).toEqual(numbers_1.PRECISION / 2n);
(0, vitest_1.expect)((0, numbers_1.numberToBigint)(-0.5, 30)).toEqual(-numbers_1.PRECISION / 2n);
(0, vitest_1.expect)((0, numbers_1.numberToBigint)(1.1234567, 6)).toEqual(1123456n);
(0, vitest_1.expect)((0, numbers_1.numberToBigint)(1.12345678, 6)).toEqual(1123456n);
(0, vitest_1.expect)((0, numbers_1.numberToBigint)(1.123456789, 6)).toEqual(1123456n);
(0, vitest_1.expect)((0, numbers_1.numberToBigint)(-1.123456789, 6)).toEqual(-1123456n);
});
});
(0, vitest_1.describe)("toBigNumberWithDecimals", () => {
(0, vitest_1.it)("should convert string to big number with decimals", () => {
(0, vitest_1.expect)((0, numbers_1.toBigNumberWithDecimals)("0", numbers_1.PRECISION_DECIMALS)).toBe(0n);
(0, vitest_1.expect)((0, numbers_1.toBigNumberWithDecimals)("1", numbers_1.PRECISION_DECIMALS)).toBe(1000000000000000000000000000000n);
(0, vitest_1.expect)((0, numbers_1.toBigNumberWithDecimals)("123.456", numbers_1.PRECISION_DECIMALS)).toBe(123456000000000000000000000000000n);
(0, vitest_1.expect)((0, numbers_1.toBigNumberWithDecimals)("123.456789", numbers_1.PRECISION_DECIMALS)).toBe(123456789000000000000000000000000n);
(0, vitest_1.expect)((0, numbers_1.toBigNumberWithDecimals)("-1.5", numbers_1.PRECISION_DECIMALS)).toBe(-1500000000000000000000000000000n);
(0, vitest_1.expect)((0, numbers_1.toBigNumberWithDecimals)("0.000001", numbers_1.PRECISION_DECIMALS)).toBe(1000000000000000000000000n);
});
(0, vitest_1.it)("should handle strings with more decimals than token decimals parameter", () => {
(0, vitest_1.expect)((0, numbers_1.toBigNumberWithDecimals)("0.123456789012345678901234567890", 5)).toBe(12345n);
});
(0, vitest_1.it)("should handle cases with different token decimals ", () => {
(0, vitest_1.expect)((0, numbers_1.toBigNumberWithDecimals)("0.1234567890123456789012345678901", 18)).toBe(123456789012345678n);
(0, vitest_1.expect)((0, numbers_1.toBigNumberWithDecimals)("0.12345", 5)).toBe(12345n);
(0, vitest_1.expect)((0, numbers_1.toBigNumberWithDecimals)("0.1", 1)).toBe(1n);
});
(0, vitest_1.it)("should be compatible with formatAmount", () => {
(0, vitest_1.expect)((0, numbers_1.formatAmount)((0, numbers_1.toBigNumberWithDecimals)("123.456", numbers_1.PRECISION_DECIMALS), factors_1.USD_DECIMALS, 3)).toBe("123.456");
(0, vitest_1.expect)((0, numbers_1.formatAmount)((0, numbers_1.toBigNumberWithDecimals)("0.789", numbers_1.PRECISION_DECIMALS), factors_1.USD_DECIMALS, 2)).toBe("0.79");
});
});
(0, vitest_1.describe)("roundWithDecimals", () => {
(0, vitest_1.it)("should round small numbers correctly", () => {
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("0.0000001", numbers_1.PRECISION_DECIMALS), {
decimals: numbers_1.PRECISION_DECIMALS,
displayDecimals: 0,
})).toBe(0n);
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("0.5", numbers_1.PRECISION_DECIMALS), {
decimals: numbers_1.PRECISION_DECIMALS,
displayDecimals: 0,
})).toBe((0, numbers_1.toBigNumberWithDecimals)("1", numbers_1.PRECISION_DECIMALS));
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("0.499", numbers_1.PRECISION_DECIMALS), {
decimals: numbers_1.PRECISION_DECIMALS,
displayDecimals: 0,
})).toBe(0n);
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("1", numbers_1.PRECISION_DECIMALS), {
decimals: numbers_1.PRECISION_DECIMALS,
displayDecimals: 1,
})).toBe((0, numbers_1.toBigNumberWithDecimals)("1", numbers_1.PRECISION_DECIMALS));
});
(0, vitest_1.it)("should round numbers at specific decimal places", () => {
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("1.49", numbers_1.PRECISION_DECIMALS), {
decimals: numbers_1.PRECISION_DECIMALS,
displayDecimals: 1,
})).toBe((0, numbers_1.toBigNumberWithDecimals)("1.5", numbers_1.PRECISION_DECIMALS));
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("1.44", numbers_1.PRECISION_DECIMALS), {
decimals: numbers_1.PRECISION_DECIMALS,
displayDecimals: 1,
})).toBe((0, numbers_1.toBigNumberWithDecimals)("1.4", numbers_1.PRECISION_DECIMALS));
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("1.499", numbers_1.PRECISION_DECIMALS), {
decimals: numbers_1.PRECISION_DECIMALS,
displayDecimals: 2,
})).toBe((0, numbers_1.toBigNumberWithDecimals)("1.50", numbers_1.PRECISION_DECIMALS));
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("1.495", numbers_1.PRECISION_DECIMALS), {
decimals: numbers_1.PRECISION_DECIMALS,
displayDecimals: 2,
})).toBe((0, numbers_1.toBigNumberWithDecimals)("1.50", numbers_1.PRECISION_DECIMALS));
});
(0, vitest_1.it)("should round large numbers correctly", () => {
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("499.999999", numbers_1.PRECISION_DECIMALS), {
decimals: numbers_1.PRECISION_DECIMALS,
displayDecimals: 5,
})).toBe((0, numbers_1.toBigNumberWithDecimals)("500.00000", numbers_1.PRECISION_DECIMALS));
});
(0, vitest_1.it)("should handle complex rounding cases", () => {
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("0.0000000000000000000000000001", numbers_1.PRECISION_DECIMALS), {
decimals: numbers_1.PRECISION_DECIMALS,
displayDecimals: 25,
})).toBe(0n);
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("0.4999999999999999999999999999", numbers_1.PRECISION_DECIMALS), {
decimals: numbers_1.PRECISION_DECIMALS,
displayDecimals: 25,
})).toBe((0, numbers_1.toBigNumberWithDecimals)("0.5", numbers_1.PRECISION_DECIMALS));
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("123.456789", numbers_1.PRECISION_DECIMALS), {
decimals: numbers_1.PRECISION_DECIMALS,
displayDecimals: 4,
})).toBe((0, numbers_1.toBigNumberWithDecimals)("123.4568", numbers_1.PRECISION_DECIMALS));
});
(0, vitest_1.it)("should round numbers with different token decimals correctly", () => {
const differentTokenDecimals = [18, 5, 1, 22];
for (const tokenDecimals of differentTokenDecimals) {
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("123.456789", tokenDecimals), {
decimals: tokenDecimals,
displayDecimals: 4,
})).toBe((0, numbers_1.toBigNumberWithDecimals)("123.4568", tokenDecimals));
}
});
(0, vitest_1.it)("should handle edge cases", () => {
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)(0n, { decimals: numbers_1.PRECISION_DECIMALS, displayDecimals: 10 })).toBe(0n);
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("-1.5", numbers_1.PRECISION_DECIMALS), {
decimals: numbers_1.PRECISION_DECIMALS,
displayDecimals: 0,
})).toBe((0, numbers_1.toBigNumberWithDecimals)("-2", numbers_1.PRECISION_DECIMALS));
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("-1.4", numbers_1.PRECISION_DECIMALS), {
decimals: numbers_1.PRECISION_DECIMALS,
displayDecimals: 0,
})).toBe((0, numbers_1.toBigNumberWithDecimals)("-1", numbers_1.PRECISION_DECIMALS));
(0, vitest_1.expect)((0, numbers_1.roundWithDecimals)((0, numbers_1.toBigNumberWithDecimals)("0.0000001", numbers_1.PRECISION_DECIMALS), {
decimals: numbers_1.PRECISION_DECIMALS,
displayDecimals: 5,
})).toBe(0n);
});
});
(0, vitest_1.describe)("formatUsdPrice", () => {
(0, vitest_1.it)("should tolerate undefined", () => {
(0, vitest_1.expect)((0, numbers_1.formatUsdPrice)()).toBeUndefined();
});
(0, vitest_1.it)("should return NA if negative", () => {
(0, vitest_1.expect)((0, numbers_1.formatUsdPrice)(-1n)).toBe("NA");
});
(0, vitest_1.it)("should calculate correct decimals if displayDecimals not passed", () => {
(0, vitest_1.expect)((0, numbers_1.formatUsdPrice)(ONE_USD * 10000n)).toBe("$10,000.00");
(0, vitest_1.expect)((0, numbers_1.formatUsdPrice)(ONE_USD * 1000n)).toBe("$1,000.00");
(0, vitest_1.expect)((0, numbers_1.formatUsdPrice)(ONE_USD * 100n)).toBe("$100.000");
(0, vitest_1.expect)((0, numbers_1.formatUsdPrice)(ONE_USD * 10n)).toBe("$10.0000");
(0, vitest_1.expect)((0, numbers_1.formatUsdPrice)(ONE_USD)).toBe("$1.0000");
(0, vitest_1.expect)((0, numbers_1.formatUsdPrice)(ONE_USD / 10n)).toBe("$0.10000");
(0, vitest_1.expect)((0, numbers_1.formatUsdPrice)(ONE_USD / 100n)).toBe("$0.010000");
(0, vitest_1.expect)((0, numbers_1.formatUsdPrice)(ONE_USD / 1000n)).toBe("$0.0010000");
(0, vitest_1.expect)((0, numbers_1.formatUsdPrice)(ONE_USD / 10000n)).toBe("$0.0001000");
(0, vitest_1.expect)((0, numbers_1.formatUsdPrice)(ONE_USD / 100000n)).toBe("$0.00001000");
(0, vitest_1.expect)((0, numbers_1.formatUsdPrice)(ONE_USD / 1000000000n)).toBe("$0.000000001");
(0, vitest_1.expect)((0, numbers_1.formatUsdPrice)(ONE_USD / 10000000000n)).toBe("< $0.000000001");
});
});
(0, vitest_1.describe)("formatAmountHuman", () => {
(0, vitest_1.it)("positive", () => {
(0, vitest_1.expect)((0, numbers_1.formatAmountHuman)(ONE_USD, factors_1.USD_DECIMALS)).toBe("1.0");
(0, vitest_1.expect)((0, numbers_1.formatAmountHuman)(ONE_USD * 1000n, factors_1.USD_DECIMALS)).toBe("1.0k");
(0, vitest_1.expect)((0, numbers_1.formatAmountHuman)(ONE_USD * 1000000n, factors_1.USD_DECIMALS)).toBe("1.0m");
});
(0, vitest_1.it)("negative", () => {
(0, vitest_1.expect)((0, numbers_1.formatAmountHuman)(-1n * ONE_USD, factors_1.USD_DECIMALS)).toBe("-1.0");
(0, vitest_1.expect)((0, numbers_1.formatAmountHuman)(-1n * ONE_USD * 1000n, factors_1.USD_DECIMALS)).toBe("-1.0k");
(0, vitest_1.expect)((0, numbers_1.formatAmountHuman)(-1n * ONE_USD * 1000000n, factors_1.USD_DECIMALS)).toBe("-1.0m");
});
(0, vitest_1.it)("should display dollar sign", () => {
(0, vitest_1.expect)((0, numbers_1.formatAmountHuman)(ONE_USD, factors_1.USD_DECIMALS, true)).toBe("$1.0");
(0, vitest_1.expect)((0, numbers_1.formatAmountHuman)(-1n * ONE_USD, factors_1.USD_DECIMALS, true)).toBe("-$1.0");
});
(0, vitest_1.it)("should display decimals", () => {
(0, vitest_1.expect)((0, numbers_1.formatAmountHuman)(ONE_USD * 1000n, factors_1.USD_DECIMALS, false, 2)).toBe("1.00k");
(0, vitest_1.expect)((0, numbers_1.formatAmountHuman)(ONE_USD * 1500000n, factors_1.USD_DECIMALS, false, 2)).toBe("1.50m");
(0, vitest_1.expect)((0, numbers_1.formatAmountHuman)(ONE_USD * 1000n, factors_1.USD_DECIMALS, false, 0)).toBe("1k");
(0, vitest_1.expect)((0, numbers_1.formatAmountHuman)(ONE_USD * 1500000n, factors_1.USD_DECIMALS, false, 0)).toBe("2m");
});
});
(0, vitest_1.describe)("formatBalanceAmount", () => {
(0, vitest_1.it)("should display balance amount", () => {
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD * 1000n, factors_1.USD_DECIMALS)).toBe("1,000.0000");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(0n, factors_1.USD_DECIMALS)).toBe("-");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(0n, factors_1.USD_DECIMALS, undefined, { showZero: true })).toBe("0.0000");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD * 1n, factors_1.USD_DECIMALS)).toBe("1.0000");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 10n, factors_1.USD_DECIMALS)).toBe("0.10000");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 100n, factors_1.USD_DECIMALS)).toBe("0.010000");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 1000n, factors_1.USD_DECIMALS)).toBe("0.0010000");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 10000n, factors_1.USD_DECIMALS)).toBe("0.00010000");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 100000n, factors_1.USD_DECIMALS)).toBe("0.00001000");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 1000000n, factors_1.USD_DECIMALS)).toBe("0.00000100");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 10000000n, factors_1.USD_DECIMALS)).toBe("0.00000010");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 100000000n, factors_1.USD_DECIMALS)).toBe("0.00000001");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 1000000000n, factors_1.USD_DECIMALS)).toBe("1.00e-9");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 1000000000000n, factors_1.USD_DECIMALS)).toBe("1.00e-12");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD * -1n, factors_1.USD_DECIMALS)).toBe("-1.0000");
});
(0, vitest_1.it)("should display balance amount with symbol", () => {
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD, factors_1.USD_DECIMALS, "USDC")).toBe("1.0000 USDC");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(0n, factors_1.USD_DECIMALS, "USDC", { showZero: true })).toBe("0.0000 USDC");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(0n, factors_1.USD_DECIMALS, "USDC", { showZero: false })).toBe("-");
});
(0, vitest_1.it)("should display balance of stable token correctly", () => {
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD, factors_1.USD_DECIMALS, undefined, { isStable: true })).toBe("1.00");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 10n, factors_1.USD_DECIMALS, undefined, { isStable: true })).toBe("0.100");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 100n, factors_1.USD_DECIMALS, undefined, { isStable: true })).toBe("0.0100");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 1000n, factors_1.USD_DECIMALS, undefined, { isStable: true })).toBe("0.00100");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 10000n, factors_1.USD_DECIMALS, undefined, { isStable: true })).toBe("0.00010000");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 100000n, factors_1.USD_DECIMALS, undefined, { isStable: true })).toBe("0.00001000");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 1000000n, factors_1.USD_DECIMALS, undefined, { isStable: true })).toBe("0.00000100");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 10000000n, factors_1.USD_DECIMALS, undefined, { isStable: true })).toBe("0.00000010");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 100000000n, factors_1.USD_DECIMALS, undefined, { isStable: true })).toBe("0.00000001");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(ONE_USD / 1000000000n, factors_1.USD_DECIMALS, undefined, { isStable: true })).toBe("1.00e-9");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(0n, factors_1.USD_DECIMALS, undefined, { isStable: true, showZero: true })).toBe("0.00");
(0, vitest_1.expect)((0, numbers_1.formatBalanceAmount)(0n, factors_1.USD_DECIMALS, undefined, { isStable: true, showZero: false })).toBe("-");
});
});
(0, vitest_1.describe)("formatFactor", () => {
(0, vitest_1.it)("should format factor", () => {
(0, vitest_1.expect)((0, numbers_1.formatFactor)(0n)).toBe("0");
(0, vitest_1.expect)((0, numbers_1.formatFactor)(1n)).toBe("0.000000000000000000000000000001");
(0, vitest_1.expect)((0, numbers_1.formatFactor)(1000n)).toBe("0.000000000000000000000000001");
(0, vitest_1.expect)((0, numbers_1.formatFactor)(1000000n)).toBe("0.000000000000000000000001");
(0, vitest_1.expect)((0, numbers_1.formatFactor)(1000000000n)).toBe("0.000000000000000000001");
(0, vitest_1.expect)((0, numbers_1.formatFactor)(1000000000000n)).toBe("0.000000000000000001");
(0, vitest_1.expect)((0, numbers_1.formatFactor)(1000000000000000n)).toBe("0.000000000000001");
(0, vitest_1.expect)((0, numbers_1.formatFactor)(1000000000000000000n)).toBe("0.000000000001");
(0, vitest_1.expect)((0, numbers_1.formatFactor)(1000000000000000000000n)).toBe("0.000000001");
(0, vitest_1.expect)((0, numbers_1.formatFactor)(1000000000000000000000000n)).toBe("0.000001");
(0, vitest_1.expect)((0, numbers_1.formatFactor)(1000000000000000000000000000n)).toBe("0.001");
(0, vitest_1.expect)((0, numbers_1.formatFactor)(1000000000000000000000000000000n)).toBe("1");
});
});
(0, vitest_1.describe)("formatPercentage", () => {
(0, vitest_1.it)("should format a basic percentage", () => {
(0, vitest_1.expect)((0, numbers_1.formatPercentage)(100n, { displayDecimals: 4 })).toBe("1.0000%");
(0, vitest_1.expect)((0, numbers_1.formatPercentage)(2500n)).toBe("25.00%");
(0, vitest_1.expect)((0, numbers_1.formatPercentage)(123456n)).toBe("1234.56%");
});
(0, vitest_1.it)("should handle undefined input with fallbackToZero", () => {
(0, vitest_1.expect)((0, numbers_1.formatPercentage)(undefined, { fallbackToZero: true })).toBe("0.00%");
});
(0, vitest_1.it)("should display signed percentage", () => {
(0, vitest_1.expect)((0, numbers_1.formatPercentage)(100n, { signed: true })).toBe("+1.00%");
(0, vitest_1.expect)((0, numbers_1.formatPercentage)(-100n, { signed: true })).toBe("-1.00%");
});
(0, vitest_1.it)("should format with different displayDecimals", () => {
(0, vitest_1.expect)((0, numbers_1.formatPercentage)(100n, { displayDecimals: 2 })).toBe("1.00%");
(0, vitest_1.expect)((0, numbers_1.formatPercentage)(123456n, { displayDecimals: 1 })).toBe("1234.6%");
});
(0, vitest_1.it)("should handle basis points (bps) formatting", () => {
(0, vitest_1.expect)((0, numbers_1.formatPercentage)((0, numbers_1.toBigNumberWithDecimals)("1", numbers_1.PERCENT_PRECISION_DECIMALS), { bps: false, displayDecimals: 4 })).toBe("1.0000%");
(0, vitest_1.expect)((0, numbers_1.formatPercentage)((0, numbers_1.toBigNumberWithDecimals)("0.999", numbers_1.PERCENT_PRECISION_DECIMALS), { bps: false, displayDecimals: 5 })).toBe("0.99900%");
});
});