UNPKG

asclasit

Version:

ASync CLasses + ASync ITerators

178 lines (149 loc) 6.79 kB
const Iter = require('./filter'); const _ = require('../func'); test('Iter_.filter: true filter', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.filter(); expect(Array.from(wrapped)).toEqual(['a', 1, {x: 1}, [5, 1]]); }); test('Iter_.filter: one functional', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.filter(v => !v); expect(Array.from(wrapped)).toEqual(['', 0, null, NaN, false, 0n]); }); test('Iter_.filter: several functionals', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.filter(o => o && o.x, v => !v); expect(Array.from(wrapped)).toEqual(['a', '', 1, 0, null, NaN, [5, 1], false, 0n]); }); test('Iter_.dfilter: one arg', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.dfilter(5); expect(Array.from(wrapped)).toEqual(['a', '', 1]); }); test('Iter_.dfilter: stop', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.dfilter(v => v != null ? true : _.stop); expect(Array.from(wrapped)).toEqual(['a', '', 1, 0]); }); test('Iter_.dfilter: post stop', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.dfilter((v, a, d, p) => !p ? true : v != null ? true : _.stop); expect(Array.from(wrapped)).toEqual(['a', '', 1, 0, null]); }); test('Iter_.dfilter: pass', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.dfilter(v => v != null ? false : _.pass); expect(Array.from(wrapped)).toEqual([null, NaN, {x: 1}, [5, 1], false, 0n]); }); test('Iter_.dfilter: post pass', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.dfilter((v, a, d, p) => !p ? true : v != null ? true : _.pass); expect(Array.from(wrapped)).toEqual(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n]); }); test('Iter_.dfilter: post pass multiple', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.dfilter(_.echo, (v, a, d, p) => !p ? true : v != null ? true : _.pass); expect(Array.from(wrapped)).toEqual(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n]); }); test('Iter_.call, Iter_.debug: call external function', () => { const res = []; const seq = []; const wrapped = new Iter(Iter.getIter([1, 2, 3])); wrapped.call(x => x + 1, (x, y) => seq.push(x, y)); wrapped.debug(x => res.push(x)); expect(Array.from(wrapped)).toEqual([1, 2, 3]); expect(res).toEqual([1, 2, 3]); expect(seq).toEqual([2, 1, 3, 2, 4, 3]); }); test('Iter_.dbglog: debug output to console.log', () => { let res; const logs = []; const origLog = console.log; console.log = (...ents) => logs.push(ents); try { const wr = new Iter(['test']); wr.dbglog('Iter.dbglog').debug(_.dbglog_('$.dbglog_')); res = Array.from(wr); } finally { console.log = origLog; } expect(res).toEqual(['test']); expect(logs).toEqual([['Iter.dbglog', 'test'], ['$.dbglog_', 'test']]); }); test('Iter_.skip: skip first items', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.skip(o => o && o.x, v => !v); expect(Array.from(wrapped)).toEqual([{x: 1}, [5, 1], false, 0n]); }); test('Iter_.skip: skip first number of items', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.skip(5); expect(Array.from(wrapped)).toEqual([NaN, {x: 1}, [5, 1], false, 0n]); }); test('Iter_.skip: skip zero', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.skip(0); expect(Array.from(wrapped)).toEqual(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n]); }); test('Iter_.take: empty', () => { const wrapped = new Iter(Iter.getIter([1, 2, 3, 4, 5, 4, 3, 2, 1])); wrapped.take(); expect(Array.from(wrapped)).toEqual([1, 2, 3, 4, 5, 4, 3, 2, 1]); }); test('Iter_.take: one arg', () => { const wrapped = new Iter(Iter.getIter([1, 2, 3, 4, 5, 4, 3, 2, 1])); wrapped.take(v => v < 4); expect(Array.from(wrapped)).toEqual([1, 2, 3]); }); test('Iter_.take: multi arg', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.take(o => o && o.x, v => !v); expect(Array.from(wrapped)).toEqual(['a', '', 1, 0, null, NaN]); }); test('Iter_.take: number', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.take(2); expect(Array.from(wrapped)).toEqual(['a', '']); }); test('Iter_.take: zero', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.take(0); expect(Array.from(wrapped)).toEqual([]); }); test('Iter_.takes: multi arg', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.takes(o => o && o.x, v => !v); expect(Array.from(wrapped)).toEqual(['a', '', 1, 0, null, NaN, {x: 1}]); }); test('Iter_.takes: number', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.takes(2); expect(Array.from(wrapped)).toEqual(['a', '']); }); test('Iter_.pfilter: takes', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.pfilter(2, _.condTake); expect(Array.from(wrapped)).toEqual(['a', '', 1]); }); test('Iter_.pfilter: takes, take', () => { const iter = Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n]); iter.return = () => ({done: true}); const wrapped = new Iter(iter); wrapped.pfilter(2, _.condTake).take(2); expect(Array.from(wrapped)).toEqual(['a', '']); }); test('Iter_.pfilter: pass', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.pfilter(() => _.pass); expect(Array.from(wrapped)).toEqual(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n]); }); test('Iter_.stop: one arg', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.stop(_.eq_(null)); expect(Array.from(wrapped)).toEqual(['a', '', 1, 0]); }); test('Iter_.stop: multi arg', () => { const wrapped = new Iter(Iter.getIter(['a', '', 1, 0, null, NaN, {x: 1}, [5, 1], false, 0n])); wrapped.stop(_.times_(7), _.not); expect(Array.from(wrapped)).toEqual(['a', '', 1, 0]); });