PHP WebShell
Текущая директория: /opt/BitGoJS/modules/utxo-ord/test
Просмотр файла: ord.ts
/* eslint no-redeclare: 0 */
import * as assert from 'assert';
import { InvalidOrdOutput, InvalidSatRange, OrdOutput } from '../src';
import { output, range } from './util';
describe('SatRange', function () {
it('size', function () {
assert.strictEqual(range(0).size(), BigInt(1));
assert.strictEqual(range(0, 1).size(), BigInt(2));
});
it('shiftedBy returns new shifted instance', function () {
const satRange = range(0, 1);
assert.deepStrictEqual(satRange.shiftedBy(BigInt(10)), range(10, 11));
assert.deepStrictEqual(satRange, range(0, 1));
});
it('implements isSupersetOf', function () {
assert.strictEqual(range(0).isSupersetOf(range(0)), true);
assert.strictEqual(range(0).isSupersetOf(range(1)), false);
assert.strictEqual(range(0, 1).isSupersetOf(range(1)), true);
assert.strictEqual(range(1).isSupersetOf(range(0, 1)), false);
});
it('implements intersectsWith', function () {
assert.strictEqual(range(0, 0).intersectsWith(range(0, 0)), true);
assert.strictEqual(range(0, 0).intersectsWith(range(0, 1)), true);
assert.strictEqual(range(0, 0).intersectsWith(range(1, 1)), false);
assert.strictEqual(range(0, 1).intersectsWith(range(1, 1)), true);
});
it('rejects invalid ranges', function () {
assert.throws(() => range(-1), InvalidSatRange);
assert.throws(() => range(1, 0), InvalidSatRange);
});
});
describe('OrdOutput', function () {
describe('constructor', function () {
it('rejects invalid ranges', function () {
assert.throws(() => output(1000, range(1000)), InvalidOrdOutput);
assert.throws(() => output(1000, range(999, 1000)), InvalidOrdOutput);
assert.throws(() => output(1000, range(1), range(0)), InvalidOrdOutput);
});
});
describe('joinedWith', function () {
it('joining two outputs shifts ranges by value of first element', function () {
assert.deepStrictEqual(
output(1000, range(0), range(99)).joinedWith(output(100, range(0), range(99))),
output(1100, range(0), range(99), range(1000), range(1099))
);
});
it('joinAll outputs shifts ranges by value of first element', function () {
assert.deepStrictEqual(
OrdOutput.joinAll([output(1000, range(0), range(99)), output(100, range(0), range(99)), output(10, range(0))]),
output(1110, range(0), range(99), range(1000), range(1099), range(1100))
);
});
});
describe('splitAt(AllowZero)', function () {
it('splits into two outputs', function () {
const o = output(1000, range(0), range(500));
assert.deepStrictEqual(o.splitAt(BigInt(1)), [output(1, range(0)), output(999, range(499))]);
assert.deepStrictEqual(o.splitAt(BigInt(100)), [output(100, range(0)), output(900, range(400))]);
assert.deepStrictEqual(o.splitAt(BigInt(500)), [output(500, range(0)), output(500, range(0))]);
[BigInt(1), BigInt(100), BigInt(500), BigInt(600), BigInt(900), BigInt(999)].forEach((value) =>
assert.deepStrictEqual(OrdOutput.joinAll(o.splitAt(value)), o)
);
assert.deepStrictEqual(o.splitAtAllowZero(BigInt(0)), [null, o]);
assert.deepStrictEqual(o.splitAtAllowZero(BigInt(1000)), [o, null]);
});
});
describe('splitAll, splitAllWithParams', function () {
it('splits according to values', function () {
const o = output(1000, range(0), range(500), range(900));
const split = o.splitAll([BigInt(100), BigInt(800)]);
const splitExact = o.splitAllWithParams([BigInt(100), BigInt(800), BigInt(100)], { exact: true });
assert.deepStrictEqual(split, [output(100, range(0)), output(800, range(400)), output(100, range(0))]);
assert.deepStrictEqual(split, splitExact);
assert.deepStrictEqual(OrdOutput.joinAll(split), o);
});
it('checks input sum for exact: true', function () {
assert.throws(
() => output(1000).splitAllWithParams([BigInt(500), BigInt(499)], { exact: true }),
/Error: value sum 999 does not match this.value 1000/
);
});
it('does not create zero-sized outputs', function () {
const o = output(1000);
assert.throws(() => o.splitAll([BigInt(0)]));
assert.throws(() => o.splitAll([BigInt(1000)]));
});
it('allows null outputs in `allowZero: true`', function () {
const o = output(1000);
assert.deepStrictEqual(o.splitAllWithParams([BigInt(500), BigInt(0)], { allowZero: true }), [
output(500),
null,
output(500),
]);
assert.deepStrictEqual(o.splitAllWithParams([BigInt(500), BigInt(0), BigInt(500)], { allowZero: true }), [
output(500),
null,
output(500),
null,
]);
assert.deepStrictEqual(
o.splitAllWithParams([BigInt(500), BigInt(0), BigInt(500)], { allowZero: true, exact: true }),
[output(500), null, output(500)]
);
});
});
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!