PHP WebShell

Текущая директория: /opt/BitGoJS/node_modules/@bitgo-forks/avalanchejs/src/utils

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

import { jest } from '@jest/globals';
import { address } from '../fixtures/common';
import { Address } from '../serializable/fxs/common';
import { AddressMap, AddressMaps } from './addressMap';

describe('AddressMap', () => {
  const testAddress1 = address();
  const testAddress2 = Address.fromHex(
    '8db97c7cece249c2b98bdc0222cc4c2a57bf52f3',
  );
  let testMap: AddressMap;

  beforeEach(() => {
    jest.resetAllMocks();
    testMap = new AddressMap();
  });

  it('sets correctly', () => {
    testMap.set(testAddress1, 3);
    testMap.set(testAddress2, 1);
    expect(testMap.get(testAddress1)).toBe(3);
    expect(testMap.get(testAddress2)).toBe(1);
    expect(testMap.get(Address.fromHex('333'))).toBeUndefined();
    expect(testMap.has(Address.fromHex('333'))).toBeFalsy();
    expect(testMap.size()).toBe(2);

    const keys: [number, Address][] = [];
    testMap.forEach((val, key) => {
      keys.push([val, key]);
    });
    expect(keys.length).toBe(2);
    expect(keys[0][0]).toBe(3);
    expect(keys[0][1].toHex()).toBe(testAddress1.toHex());
    expect(keys[1][0]).toBe(1);
    expect(keys[1][1].toHex()).toBe(testAddress2.toHex());
  });

  describe('forEachHex', () => {
    it('iterates over the storage correctly', () => {
      const callbackMock = jest.fn();
      testMap.set(testAddress1, 3);
      testMap.set(testAddress2, 1);

      testMap.forEachHex(callbackMock);

      expect(callbackMock).toBeCalledTimes(2);
      expect(callbackMock).toHaveBeenNthCalledWith(
        1,
        3,
        testAddress1.toHex(),
        testMap.storage,
      );
      expect(callbackMock).toHaveBeenNthCalledWith(
        2,
        1,
        testAddress2.toHex(),
        testMap.storage,
      );
    });

    it('reorders and iterates over the storage correctly', () => {
      const callbackMock = jest.fn();
      testMap.set(testAddress1, 3);
      testMap.set(testAddress2, 1);

      const expectedSortedMap = new AddressMap([
        [testAddress2, 0],
        [testAddress1, 1],
      ]);

      testMap.forEachHex(callbackMock, true);

      expect(callbackMock).toBeCalledTimes(2);
      expect(callbackMock).toHaveBeenNthCalledWith(
        1,
        0,
        testAddress2.toHex(),
        expectedSortedMap.storage,
      );
      expect(callbackMock).toHaveBeenNthCalledWith(
        2,
        1,
        testAddress1.toHex(),
        expectedSortedMap.storage,
      );
    });
  });
});

describe('AddressMaps', () => {
  const testAddress1 = address();
  const testAddress2 = Address.fromHex(
    '8db97c7cece249c2b98bdc0222cc4c2a57bf52f3',
  );
  const testAddress3 = Address.fromHex(
    '8db97c7cece219c2b98bdc0222cc4c2a57bf52f3',
  );

  const testMap1 = new AddressMap();
  testMap1.set(testAddress1, 3);
  testMap1.set(testAddress2, 1);
  const testMap2 = new AddressMap();
  testMap2.set(testAddress3, 2);
  testMap2.set(testAddress2, 6);

  const testAddressMaps = new AddressMaps();
  testAddressMaps.push(testMap1);
  testAddressMaps.push(testMap2);

  beforeEach(() => {
    jest.resetAllMocks();
  });

  describe('forEach', () => {
    it('iterates over the indices correctly', () => {
      const callbackMock = jest.fn();
      testAddressMaps.forEach(callbackMock);

      expect(callbackMock).toBeCalledTimes(3);
      expect(callbackMock).toHaveBeenNthCalledWith(
        1,
        [[0, 3]],
        testAddress1.toHex(),
      );
      expect(callbackMock).toHaveBeenNthCalledWith(
        2,
        [
          [0, 1],
          [1, 6],
        ],
        testAddress2.toHex(),
      );
      expect(callbackMock).toHaveBeenNthCalledWith(
        3,
        [[1, 2]],
        testAddress3.toHex(),
      );
    });

    it('iterates over the ordered indices correctly', () => {
      const callbackMock = jest.fn();
      testAddressMaps.forEach(callbackMock, true);

      expect(callbackMock).toBeCalledTimes(3);
      expect(callbackMock).toHaveBeenNthCalledWith(
        1,
        [
          [0, 0],
          [1, 1],
        ],
        testAddress2.toHex(),
      );
      expect(callbackMock).toHaveBeenNthCalledWith(
        2,
        [[0, 1]],
        testAddress1.toHex(),
      );
      expect(callbackMock).toHaveBeenNthCalledWith(
        3,
        [[1, 0]],
        testAddress3.toHex(),
      );
    });
  });

  it('pushes and getAddresses correctly', () => {
    expect(testAddressMaps.getSigIndicesForAddress(testAddress1)).toStrictEqual(
      [[0, 3]],
    );
    expect(testAddressMaps.getSigIndicesForAddress(testAddress2)).toStrictEqual(
      [
        [0, 1],
        [1, 6],
      ],
    );
    expect(testAddressMaps.getSigIndicesForAddress(testAddress3)).toStrictEqual(
      [[1, 2]],
    );

    // ordered
    expect(
      testAddressMaps.getSigIndicesForAddress(testAddress1, true),
    ).toStrictEqual([[0, 1]]);
    expect(
      testAddressMaps.getSigIndicesForAddress(testAddress2, true),
    ).toStrictEqual([
      [0, 0],
      [1, 1],
    ]);
    expect(
      testAddressMaps.getSigIndicesForAddress(testAddress3, true),
    ).toStrictEqual([[1, 0]]);

    const testAddressMaps2 = new AddressMaps();
    testAddressMaps.push(testMap1);
    testAddressMaps.push(testMap2);

    testAddressMaps2.merge(testAddressMaps);
    expect(
      testAddressMaps2.getSigIndicesForAddress(testAddress1),
    ).toStrictEqual([
      [0, 3],
      [2, 3],
    ]);
    expect(
      testAddressMaps2.getSigIndicesForAddress(testAddress2),
    ).toStrictEqual([
      [0, 1],
      [1, 6],
      [2, 1],
      [3, 6],
    ]);
    expect(
      testAddressMaps2.getSigIndicesForAddress(testAddress3),
    ).toStrictEqual([
      [1, 2],
      [3, 2],
    ]);

    // ordered
    expect(
      testAddressMaps2.getSigIndicesForAddress(testAddress1, true),
    ).toStrictEqual([
      [0, 1],
      [2, 1],
    ]);
    expect(
      testAddressMaps2.getSigIndicesForAddress(testAddress2, true),
    ).toStrictEqual([
      [0, 0],
      [1, 1],
      [2, 0],
      [3, 1],
    ]);
    expect(
      testAddressMaps2.getSigIndicesForAddress(testAddress3, true),
    ).toStrictEqual([
      [1, 0],
      [3, 0],
    ]);
  });
});

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


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