UNPKG

asclasit

Version:

ASync CLasses + ASync ITerators

125 lines (99 loc) 3.3 kB
const $ = require('./reduce'); const arr = [8, 2, 3, 4.4, 9, 1, 7, -3]; const unsafeArr = [null, null, 1, 8, null, 3, -5, undefined, 3.3]; test('$.sum: add numbers', () => { const reduced = arr.reduce($.sum); expect(reduced).toBe(31.4); }); test('$.safeSum: zeroes if not numbers', () => { const reduced = unsafeArr.reduce($.safeSum); expect(reduced).toBe(10.3); }); test('$.prod: add numbers', () => { const reduced = arr.reduce($.prod); expect(reduced).toBe(-39916.8); }); test('$.safeProd: units if zeroes or not numbers', () => { const reduced = unsafeArr.reduce($.safeProd); expect(reduced).toBe(-396); }); test('$.max: maximum', () => { const reduced = arr.reduce($.max); expect(reduced).toBe(9); }); test('$.safeMax: ignore if not numbers', () => { const reduced = unsafeArr.reduce($.safeMax); expect(reduced).toBe(8); }); test('$.min: minimum', () => { const reduced = arr.reduce($.min); expect(reduced).toBe(-3); }); test('$.safeMin: ignore if not numbers', () => { const reduced = unsafeArr.reduce($.safeMin); expect(reduced).toBe(-5); }); test('$.bitOr: bitwise or', () => { const reduced = [1, 2, 3, 16, 17].reduce($.bitOr); expect(reduced).toBe(19); }); test('$.bitAnd: bitwise and', () => { const reduced = [18, 34, 10, 19, 66].reduce($.bitAnd); expect(reduced).toBe(2); }); test('$.bitClr: bit clear', () => { const reduced = [16, 64, 2].reduce($.bitClr, 253); expect(reduced).toBe(173); }); test('$.bitXor: bitwise xor', () => { const reduced = [20, 3, 17].reduce($.bitXor); expect(reduced).toBe(6); }); test('$.or: logical or, false', () => { const reduced = [null, false, 0].reduce($.or); expect(reduced).toBe(0); }); test('$.or: logical or, true', () => { const reduced = [null, true, [], false, 0].reduce($.or); expect(reduced).toBe(true); }); test('$.orr: logical reverse or, false', () => { const reduced = [null, false, 0].reduce($.orr); expect(reduced).toBe(null); }); test('$.orr: logical reverse or, true', () => { const reduced = [null, true, [], false, 0].reduce($.orr); expect(reduced).toEqual([]); }); test('$.and: logical and, false', () => { const reduced = [{a: 1}, [false], NaN, 6].reduce($.and); expect(reduced).toBe(NaN); }); test('$.and: logical and, true', () => { const reduced = [{a: 1}, [false], 6].reduce($.and); expect(reduced).toBe(6); }); test('$.andr: logical reverse and, false', () => { const reduced = [{a: 1}, [false], NaN, 6].reduce($.andr); expect(reduced).toBe(NaN); }); test('$.andr: logical reverse and, true', () => { const reduced = [{a: 1}, [false], 6].reduce($.andr); expect(reduced).toEqual({a: 1}); }); test('$.andNot: logical and-not, false', () => { const reduced = [null, {a: 1}, , NaN, 0].reduce($.andNot, {init: true}); expect(reduced).toBe(null); }); test('$.andNot: logical and-not, true', () => { const reduced = [null, 0, 0n, NaN, false].reduce($.andNot, {init: true}); expect(reduced).toEqual({init: true}); }); test('$.xor: logical xor, false', () => { const reduced = [null, {a: 2}, 0, NaN, 3, 4].reduce($.xor, {a: 1}); expect(reduced).toBe(null); }); test('$.xor: logical xor, true', () => { const reduced = [null, {a: 2}, 0, {a: 3}, NaN, 3, 4, false].reduce($.xor, {a: 1}); expect(reduced).toBe(4); });