72 lines
1.7 KiB
TypeScript
72 lines
1.7 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { Satoshis } from '../src/satoshis';
|
|
|
|
describe('Success cases', () => {
|
|
// Test cases with single representation for each unit
|
|
type ConversionCase = {
|
|
raw: bigint;
|
|
units: {
|
|
sats: number | bigint;
|
|
satoshis: number | bigint;
|
|
bits: number;
|
|
mBCH: number;
|
|
bch: number;
|
|
};
|
|
};
|
|
|
|
const testCases: ConversionCase[] = [
|
|
{
|
|
raw: 1n,
|
|
units: {
|
|
sats: 1,
|
|
satoshis: 1,
|
|
bits: 0.01,
|
|
mBCH: 0.00001,
|
|
bch: 0.00000001,
|
|
},
|
|
},
|
|
{
|
|
raw: 333333333n,
|
|
units: {
|
|
sats: 333333333,
|
|
satoshis: 333333333,
|
|
bits: 3333333.33,
|
|
mBCH: 3333.33333,
|
|
bch: 3.33333333,
|
|
},
|
|
},
|
|
];
|
|
|
|
// Test from methods with their respective types
|
|
const fromMethods = [
|
|
{ name: 'fromSats', key: 'sats' },
|
|
{ name: 'fromSatoshis', key: 'satoshis' },
|
|
{ name: 'fromBits', key: 'bits' },
|
|
{ name: 'fromMBCH', key: 'mBCH' },
|
|
{ name: 'fromBCH', key: 'bch' },
|
|
] as const;
|
|
|
|
fromMethods.forEach(({ name, key }) => {
|
|
it.each(testCases)(`${name}()`, ({ raw, units }) => {
|
|
const satoshis = Satoshis[name](units[key]);
|
|
expect(satoshis.toRaw()).toStrictEqual(raw);
|
|
});
|
|
});
|
|
|
|
// Test to methods with their respective types
|
|
const toMethods = [
|
|
{ name: 'toSats', key: 'sats' },
|
|
{ name: 'toSatoshis', key: 'satoshis' },
|
|
{ name: 'toBits', key: 'bits' },
|
|
{ name: 'toMBCH', key: 'mBCH' },
|
|
{ name: 'toBCH', key: 'bch' },
|
|
] as const;
|
|
|
|
toMethods.forEach(({ name, key }) => {
|
|
it.each(testCases)(`${name}()`, ({ raw, units }) => {
|
|
const satoshis = Satoshis.fromRaw(raw);
|
|
expect(satoshis[name]()).toStrictEqual(units[key]);
|
|
});
|
|
});
|
|
});
|