asclasit
Version:
ASync CLasses + ASync ITerators
189 lines (158 loc) • 6.89 kB
JavaScript
const Iter = require('./map');
const _ = require('../func');
test('Iter_.map: map iterator: echo', () => {
const wrapped = new Iter(Iter.getIter([4, 0, 8, 3, 1]));
wrapped.map();
expect(Array.from(wrapped)).toEqual([4, 0, 8, 3, 1]);
});
test('Iter_.map: map falsy', () => {
const wrapped = new Iter(Iter.getIter([4, 0, 8, 3, 1]));
wrapped.map(false);
expect(Array.from(wrapped)).toEqual([false, true, false, false, false]);
});
test('Iter_.map: map not nully', () => {
const wrapped = new Iter(Iter.getIter([4, 0, , null, 1]));
wrapped.map(true);
expect(Array.from(wrapped)).toEqual([true, true, false, false, true]);
});
test('Iter_.map: map nully', () => {
const wrapped = new Iter(Iter.getIter([4, 0, , null, 1]));
wrapped.map(null);
expect(Array.from(wrapped)).toEqual([false, false, true, true, false]);
});
test('Iter_.map: map iterator: 1 function', () => {
const wrapped = new Iter(Iter.getIter([4, 0, 8, 3, 1]));
wrapped.map(v => -v);
expect(Array.from(wrapped)).toEqual([-4, -0, -8, -3, -1]);
});
test('Iter_.map: stop: 1 function', () => {
const wrapped = new Iter(Iter.getIter([4, 0, 8, 3, 1]));
wrapped.map(v => v > 6 ? _.stop : -v);
expect(Array.from(wrapped)).toEqual([-4, -0]);
});
test('Iter_.map: pass: 1 function', () => {
const wrapped = new Iter(Iter.getIter([4, 0, 8, 3, 1]));
wrapped.map(v => v > 6 ? _.pass : -v);
expect(Array.from(wrapped)).toEqual([-4, -0, 8, 3, 1]);
});
test('Iter_.map: stop: several functions', () => {
const wrapped = new Iter(Iter.getIter([4, 0, 8, 3, 1]));
wrapped.map(_.neg, v => v < -6 ? _.stop : v);
expect(Array.from(wrapped)).toEqual([-4, -0]);
});
test('Iter_.map: pass: several functions', () => {
const wrapped = new Iter(Iter.getIter([4, 0, 8, 3, 1]));
wrapped.map(_.neg, v => v < -6 ? _.pass : v);
expect(Array.from(wrapped)).toEqual([-4, -0, 8, 3, 1]);
});
test('Iter_.map: map iterator: several functions', () => {
const wrapped = new Iter(Iter.getIter([4, 0, 8, 3, 1]));
wrapped.map(v => v + v, v => -v);
expect(Array.from(wrapped)).toEqual([-8, -0, -16, -6, -2]);
});
test('Iter_.map: stretch', () => {
const wrapped = new Iter(Iter.getIter([4, 0, 8]));
wrapped.map(3);
expect(Array.from(wrapped)).toEqual([[4, 4, 4], [0, 0, 0], [8, 8, 8]]);
});
test('Iter_.map: map and lag', () => {
const wrapped = new Iter(Iter.getIter([4, 0, [8, 9], 3, 1]));
wrapped.map(-2);
expect(Array.from(wrapped)).toEqual([, , 4, 0, [8, 9]]);
});
test('Iter_.maps: map multi iterator: echo', () => {
const wrapped = new Iter(Iter.getIter([4, 0, 8, 3, 1]));
wrapped.maps();
expect(Array.from(wrapped)).toEqual([4, 0, 8, 3, 1]);
});
test('Iter_.maps: map multi iterator', () => {
const wrapped = new Iter(Iter.getIter([4, 0, 8, 3, 1]));
wrapped.maps(v => v + v, v => -v, v => !v ? null : v < -6 ? [v, -v] : v);
expect(Array.from(wrapped)).toEqual([-8, 8, -16, 16, -6, -2]);
});
test('Iter_.maps: stretch', () => {
const wrapped = new Iter(Iter.getIter([4, 0, 8, 3, 1]));
wrapped.maps(2);
expect(Array.from(wrapped)).toEqual([4, 4, 0, 0, 8, 8, 3, 3, 1, 1]);
});
test('Iter_.maps: map multi and skip last', () => {
const wrapped = new Iter(Iter.getIter([4, 0, [8, 9], 3, 1]));
wrapped.maps(-2);
expect(Array.from(wrapped)).toEqual([4, 0, 8, 9]);
});
test('Iter_.maps: stop: several functions', () => {
const iter = Iter.getIter([4, 0, 8, 3, 1]);
iter.return = () => ({done: true});
const wrapped = new Iter(iter);
wrapped.maps(_.neg, v => v < -6 ? _.stop : [v, 0]);
expect(Array.from(wrapped)).toEqual([-4, 0, -0, 0]);
});
test('Iter_.maps: pass: several functions', () => {
const wrapped = new Iter(Iter.getIter([4, 0, 8, 3, 1]));
wrapped.maps(_.neg, v => v < -6 ? _.pass : [v, 0]);
expect(Array.from(wrapped)).toEqual([-4, 0, -0, 0, 8, 3, 1]);
});
test('Iter_.mapTo: map to entry: echo', () => {
const wrapped = new Iter(Iter.getIter([4, 0, 8, 3, 1]));
wrapped.mapTo();
expect(Array.from(wrapped)).toEqual([4, 0, 8, 3, 1]);
});
test('Iter_.mapTo: map to inwalk', () => {
const wrapped = new Iter(Iter.getIter([[{a: [4]}, 1], [{a: [8]}, 2], [, 4], null]));
wrapped.mapTo([0, 'a', 0], a => a && a[1] ? a[1] + 1 : 'def');
expect(Array.from(wrapped)).toEqual([[{a: [2]}, 1], [{a: [3]}, 2], [{a: [5]}, 4], null]);
});
test('Iter_.mapTo: stop: several functions', () => {
const iter = Iter.getIter([[4], [0], [8], [3], [1]]);
iter.return = () => ({done: true});
const wrapped = new Iter(iter);
wrapped.mapTo(0, '0', _.neg, v => v < -6 ? _.stop : v);
expect(Array.from(wrapped)).toEqual([[-4], [-0]]);
});
test('Iter_.mapTo: pass: several functions', () => {
const wrapped = new Iter(Iter.getIter([[4], [0], [8], [3], [1]]));
wrapped.mapTo(0, '0', _.neg, v => v < -6 ? _.pass : v);
expect(Array.from(wrapped)).toEqual([[-4], [-0], [8], [3], [1]]);
});
test('Iter_.mapAt: map by field', () => {
const wrapped = new Iter(Iter.getIter([['a', 1], ['b', 2], ['c', 4], null]));
wrapped.mapAt(0, key => key ? key.toString().toUpperCase() : 'def');
expect(Array.from(wrapped)).toEqual([['A', 1], ['B', 2], ['C', 4], null]);
});
test('Iter_.mapAt: map by inwalk', () => {
const wrapped = new Iter(Iter.getIter([[{a: [4]}, 1], [{a: [8]}, 2], [, 4], null]));
wrapped.mapAt([0, 'a', 0], key => key ? key.toString() : 'def');
expect(Array.from(wrapped)).toEqual([[{a: ['4']}, 1], [{a: ['8']}, 2], [{a: ['def']}, 4], null]);
});
test('Iter_.mapKeys: map key in entries', () => {
const wrapped = new Iter(Iter.getIter([[4, 1], [8, 2]]));
wrapped.mapKeys(([key]) => key.toString());
expect(Array.from(wrapped)).toEqual([['4', 1], ['8', 2]]);
});
test('Iter_.mapValues: map value in entries', () => {
const wrapped = new Iter(Iter.getIter([[4, 1], [8, 2]]));
wrapped.mapValues(([, value]) => value.toString());
expect(Array.from(wrapped)).toEqual([[4, '1'], [8, '2']]);
});
test('Iter_.mapKey: map key in entries', () => {
const wrapped = new Iter(Iter.getIter([[4, 1], [8, 2]]));
wrapped.mapKey((key) => key.toString());
expect(Array.from(wrapped)).toEqual([['4', 1], ['8', 2]]);
});
test('Iter_.mapValue: map value in entries', () => {
const wrapped = new Iter(Iter.getIter([[4, 1], [8, 2]]));
wrapped.mapValue((value) => value.toString());
expect(Array.from(wrapped)).toEqual([[4, '1'], [8, '2']]);
});
test('Iter_.gen: apply generator', () => {
const wrapped = new Iter(Iter.getIter([1, 2, 3]));
wrapped.gen(function* (iter, arg) { for (const item of iter) yield `${arg}${item}`; }, 'z');
expect(Array.from(wrapped)).toEqual(['z1', 'z2', 'z3']);
});
test('Iter_.save, Iter_.load: save/load items', () => {
const wrap = new Iter(Iter.getIter([1, 2, 3]));
const strs = [];
const sqrs = Array.from(wrap.save(1).map(v => v.toString()).map(v => strs.push(v)).load(1).map(v => v*v));
expect(strs).toEqual(['1', '2', '3']);
expect(sqrs).toEqual([1, 4, 9]);
});