import assert from 'assert';

describe('reduce', () => {
  it('reduces without a seed', async () => {
    await Observable.from([1, 2, 3, 4, 5, 6]).reduce((a, b) => {
      return a + b;
    }).forEach(x => {
      assert.equal(x, 21);
    });
  });

  it('errors if empty and no seed', async () => {
    try {
      await Observable.from([]).reduce((a, b) => {
        return a + b;
      }).forEach(() => null);
      assert.ok(false);
    } catch (err) {
      assert.ok(true);
    }
  });

  it('reduces with a seed', async () => {
    Observable.from([1, 2, 3, 4, 5, 6]).reduce((a, b) => {
      return a + b;
    }, 100).forEach(x => {
      assert.equal(x, 121);
    });
  });

  it('reduces an empty list with a seed', async () => {
    await Observable.from([]).reduce((a, b) => {
      return a + b;
    }, 100).forEach(x => {
      assert.equal(x, 100);
    });
  });
});