///
import { asArray, asIter, chunks, filter, first, last, map, reduce } from './iterator';
function* fib10(): IterableIterator {
let prev = 0;
let cur = 1;
for (let i = 0; i < 10; i++) {
yield cur;
const next = cur + prev;
prev = cur;
cur = next;
}
}
// 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
describe('iterator helpers', () => {
it('first', () => {
expect(first(fib10())).toBe(1);
});
it('last', () => {
expect(last(fib10())).toBe(55);
});
it('filters', () => {
const evens = filter(fib10(), x => x % 2 === 0);
expect(Array.from(evens)).toEqual([2, 8, 34]);
});
it('maps', () => {
const digits = map(fib10(), x => Math.floor(x / 10));
expect(Array.from(digits)).toEqual([0, 0, 0, 0, 0, 0, 1, 2, 3, 5]);
})
it('reduces', () => {
const evenSums = reduce(filter(fib10(), x => x % 2 === 0), (s, x) => s + x, 0);
expect(evenSums).toBe(44);
});
it('asIter', () => {
const arr = [1, 2, 3];
const iter = asIter(arr);
const result = asArray(iter);
expect(result).toEqual(arr);
});
it('chunks', () => {
const fibChunks = asArray(map(chunks(fib10(), 2), asArray));
expect(fibChunks).toEqual([[1, 1], [2, 3], [5, 8], [13, 21], [34, 55]]);
})
});