PHP WebShell

Текущая директория: /opt/BitGoJS/modules/abstract-utxo/test/transaction/descriptor

Просмотр файла: outputDifference.ts

import assert from 'assert';

import {
  ActualOutput,
  ExpectedOutput,
  matchingOutput,
  outputDifference,
  outputDifferencesWithExpected,
} from '../../../src/transaction/outputDifference';

describe('outputDifference', function () {
  function output(script: string, value: bigint | number): ActualOutput;
  function output(script: string, value: 'max'): ExpectedOutput;
  function output(script: string, value: bigint | number | 'max'): ActualOutput | ExpectedOutput {
    const scriptBuffer = Buffer.from(script, 'hex');
    if (scriptBuffer.toString('hex') !== script) {
      throw new Error('invalid script');
    }
    return {
      script: Buffer.from(script, 'hex'),
      value: value === 'max' ? 'max' : BigInt(value),
    };
  }

  const a = output('aa', 1);
  const a2 = output('aa', 2);
  const aMax = output('aa', 'max');
  const b = output('bb', 1);
  const c = output('cc', 1);

  describe('equalOutput', function () {
    it('has expected result', function () {
      assert.deepStrictEqual(matchingOutput(a, a), true);
      assert.deepStrictEqual(matchingOutput(a, a2), false);
      assert.deepStrictEqual(matchingOutput(a, b), false);
      assert.deepStrictEqual(matchingOutput(aMax, b), false);

      assert.deepStrictEqual(matchingOutput(aMax, a), true);
      assert.deepStrictEqual(matchingOutput(a, aMax), true);
      // this one does not appear in practice but is a valid comparison
      assert.deepStrictEqual(matchingOutput(aMax, aMax), true);
    });
  });

  describe('outputDifference', function () {
    it('has expected result', function () {
      assert.deepStrictEqual(outputDifference([], []), []);
      assert.deepStrictEqual(outputDifference([a], []), [a]);
      assert.deepStrictEqual(outputDifference([aMax], []), [aMax]);
      assert.deepStrictEqual(outputDifference([], [a]), []);
      assert.deepStrictEqual(outputDifference([], [aMax]), []);
      assert.deepStrictEqual(outputDifference([a], [a]), []);
      assert.deepStrictEqual(outputDifference([a], [aMax]), []);
      assert.deepStrictEqual(outputDifference([aMax], [a]), []);
      assert.deepStrictEqual(outputDifference([a, a], [a]), [a]);
      assert.deepStrictEqual(outputDifference([a, a], [aMax]), [a]);
      assert.deepStrictEqual(outputDifference([a, a, a], [a]), [a, a]);
      assert.deepStrictEqual(outputDifference([a, b, c], [a, b]), [c]);
      assert.deepStrictEqual(outputDifference([a, b, c], [aMax, b]), [c]);
      assert.deepStrictEqual(outputDifference([a, b, c, a], [a, b]), [c, a]);

      assert.deepStrictEqual(outputDifference([a], [a2]), [a]);
      assert.deepStrictEqual(outputDifference([a2], [a]), [a2]);
    });
  });

  describe('outputDifferencesWithExpected', function () {
    function test(
      outputs: ActualOutput[],
      recipients: ExpectedOutput[],
      expected: {
        missing: ExpectedOutput[];
        explicit: ActualOutput[];
        implicit: ActualOutput[];
      }
    ) {
      const result = outputDifferencesWithExpected(outputs, recipients);
      assert.deepStrictEqual(result, {
        explicitOutputs: expected.explicit,
        implicitOutputs: expected.implicit,
        missingOutputs: expected.missing,
      });
    }

    it('has expected result', function () {
      test([a], [], { missing: [], explicit: [], implicit: [a] });
      test([], [a], { missing: [a], explicit: [], implicit: [] });
      test([a], [a], { missing: [], explicit: [a], implicit: [] });
      test([a], [a2], { missing: [a2], explicit: [], implicit: [a] });
      test([b], [a], { missing: [a], explicit: [], implicit: [b] });
      test([a, a], [a], { missing: [], explicit: [a], implicit: [a] });
      test([a, b], [a], { missing: [], explicit: [a], implicit: [b] });
    });
  });
});

Выполнить команду


Для локальной разработки. Не используйте в интернете!