39 lines
1.2 KiB
TypeScript
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);
|
|
});
|
|
});
|