Files
backend/src/integrations/tbank/decimal.spec.ts
T

39 lines
1.2 KiB
TypeScript

import { add, formatDecimal, multiply, subtract } from '../../common/decimal';
import { decimal } from './decimal';
describe('decimal', () => {
it('keeps signed nanos exact without floats', () => {
expect(formatDecimal(decimal({ units: 0, nano: -500000000 }))).toBe('-0.5');
expect(
formatDecimal(
add(decimal({ units: '9007199254740993' }), decimal({ nano: 1 })),
),
).toBe('9007199254740993.000000001');
expect(
formatDecimal(
subtract(decimal({ units: 1 }), decimal({ nano: 500000000 })),
),
).toBe('0.5');
expect(
formatDecimal(
multiply(decimal({ units: 2 }), decimal({ nano: 500000000 })),
),
).toBe('1');
});
});
describe('decimal formatting', () => {
it.each([
[120000n, 4, '12'],
[-120030n, 4, '-12.003'],
[1n, 4, '0.0001'],
[0n, 4, '0'],
])('preserves value %s at scale %s while trimming only trailing zeros', (value, scale, expected) => {
expect(formatDecimal({ value, scale })).toBe(expected);
});
it('preserves a long fraction with a trailing zero run', () => {
const significant = '1'.repeat(10_000);
expect(formatDecimal({ value: BigInt(significant + '0'.repeat(10_000)), scale: 20_000 })).toBe('0.' + significant);
});
});