import { expect } from 'chai';
import { describe, it } from 'mocha';

import { AccumulatorMap } from '../AccumulatorMap.js';

function expectMap<K, V>(map: Map<K, V>) {
  return expect(Object.fromEntries(map));
}

describe('AccumulatorMap', () => {
  it('can be Object.toStringified', () => {
    const accumulatorMap = new AccumulatorMap();

    expect(Object.prototype.toString.call(accumulatorMap)).to.equal(
      '[object AccumulatorMap]',
    );
  });

  it('accumulate items', () => {
    const accumulatorMap = new AccumulatorMap<string, number>();

    expectMap(accumulatorMap).to.deep.equal({});

    accumulatorMap.add('a', 1);
    accumulatorMap.add('b', 2);
    accumulatorMap.add('c', 3);
    accumulatorMap.add('b', 4);
    accumulatorMap.add('c', 5);
    accumulatorMap.add('c', 6);
    expectMap(accumulatorMap).to.deep.equal({
      a: [1],
      b: [2, 4],
      c: [3, 5, 6],
    });
  });
});