UNPKG

@softwareventures/array

Version:

Pure functional array manipulation and traversal

336 lines 13.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const ava_1 = tslib_1.__importDefault(require("ava")); const index_1 = require("./index"); (0, ava_1.default)("isArray", t => { t.true((0, index_1.isArray)([1, 2, 3])); t.false((0, index_1.isArray)({ length: 3 })); }); (0, ava_1.default)("isArrayLike", t => { t.true((0, index_1.isArrayLike)([1, 2, 3])); t.true((0, index_1.isArrayLike)({ length: 3 })); t.false((0, index_1.isArrayLike)({})); t.false((0, index_1.isArrayLike)(3)); }); (0, ava_1.default)("first", t => { t.is((0, index_1.first)([1, 2, 3]), 1); t.is((0, index_1.first)([]), null); }); (0, ava_1.default)("tail", t => { t.deepEqual((0, index_1.tail)([1, 2, 3, 4]), [2, 3, 4]); t.deepEqual((0, index_1.tail)([]), []); }); (0, ava_1.default)("initial", t => { t.deepEqual((0, index_1.initial)([1, 2, 3, 4]), [1, 2, 3]); t.deepEqual((0, index_1.initial)([]), []); }); (0, ava_1.default)("last", t => { t.is((0, index_1.last)([]), null); t.is((0, index_1.last)([1, 2, 3]), 3); }); (0, ava_1.default)("only", t => { t.is((0, index_1.only)([]), null); t.is((0, index_1.only)([4]), 4); t.is((0, index_1.only)([3, 4, 5]), null); }); (0, ava_1.default)("empty", t => { t.true((0, index_1.empty)([])); t.false((0, index_1.empty)([1, 2, 3])); }); (0, ava_1.default)("reverse", t => { const a = [1, 2, 4, 3]; t.deepEqual((0, index_1.reverse)(a), [3, 4, 2, 1]); t.deepEqual(a, [1, 2, 4, 3]); // Ensure original array is untouched. }); (0, ava_1.default)("slice", t => { t.deepEqual((0, index_1.slice)([1, 2, 3, 4], 1), [2, 3, 4]); t.deepEqual((0, index_1.slice)([1, 2, 3, 4, 5], 1, 4), [2, 3, 4]); t.deepEqual((0, index_1.slice)([1, 2, 3], 2), [3]); t.deepEqual((0, index_1.slice)([1, 2, 3], 0, 2), [1, 2]); t.deepEqual((0, index_1.slice)([], 3, 5), []); }); (0, ava_1.default)("takeWhile", t => { t.deepEqual((0, index_1.takeWhile)([1, 2, 3, 4, 3, 2, 1], e => e < 4), [1, 2, 3]); t.deepEqual((0, index_1.takeWhile)([1, 2, 3], (_, i) => i < 2), [1, 2]); }); (0, ava_1.default)("dropWhile", t => { t.deepEqual((0, index_1.dropWhile)([1, 2, 3, 4, 3, 2, 1], e => e < 4), [4, 3, 2, 1]); t.deepEqual((0, index_1.dropWhile)([1, 2, 3], (_, i) => i < 2), [3]); }); (0, ava_1.default)("equal", t => { t.true((0, index_1.equal)([1, 2, 3], [1, 2, 3])); t.false((0, index_1.equal)([1, 2, 3], [1, 2, 3, 4])); t.false((0, index_1.equal)([1, 2, 3, 4], [1, 2, 3])); t.false((0, index_1.equal)([1, 3, 3], [1, 2, 3])); t.true((0, index_1.equal)([ [1, 2], [3, 4] ], [ [1, 2], [3, 4] ], index_1.equal)); t.false((0, index_1.equal)([ [1, 2], [3, 4] ], [ [1, 2], [3, 4] ])); }); (0, ava_1.default)("prefixMatch", t => { t.true((0, index_1.prefixMatch)([], [])); t.true((0, index_1.prefixMatch)([1, 2, 3], [])); t.true((0, index_1.prefixMatch)([1, 2, 3, 4], [1, 2])); t.false((0, index_1.prefixMatch)([1, 3, 4], [1, 2])); t.false((0, index_1.prefixMatch)([], [1])); }); (0, ava_1.default)("map", t => { t.deepEqual((0, index_1.map)([1, 2, 3], e => e + 1), [2, 3, 4]); t.deepEqual((0, index_1.map)([1, 2, 3], (e, i) => (i === 1 ? e * 10 : e)), [1, 20, 3]); }); (0, ava_1.default)("filter", t => { t.deepEqual((0, index_1.filter)([1, 2, 3], e => e % 2 === 1), [1, 3]); t.deepEqual((0, index_1.filter)([1, 3, 2, 4, 5], (_, i) => i % 2 === 0), [1, 2, 5]); }); (0, ava_1.default)("exclude", t => { t.deepEqual((0, index_1.exclude)([1, 2, 3, 4, 3, 2, 1], n => n < 3), [3, 4, 3]); }); (0, ava_1.default)("excludeNull", t => { t.deepEqual((0, index_1.excludeNull)(["a", null, "b"]), ["a", "b"]); }); (0, ava_1.default)("excludeFirst", t => { t.deepEqual((0, index_1.excludeFirst)([1, 2, 3, 4, 3, 2, 1], n => n > 2), [1, 2, 4, 3, 2, 1]); }); (0, ava_1.default)("remove", t => { t.deepEqual((0, index_1.remove)([1, 2, 3, 4, 3, 2, 1], 3), [1, 2, 4, 2, 1]); }); (0, ava_1.default)("removeFirst", t => { t.deepEqual((0, index_1.removeFirst)([1, 2, 3, 4, 3, 2, 1], 3), [1, 2, 4, 3, 2, 1]); }); (0, ava_1.default)("fold", t => { t.is((0, index_1.fold)([1, 2, 3], (a, e, i) => a + e * i, 0), 8); }); (0, ava_1.default)("fold1", t => { t.is((0, index_1.fold1)([1, 2, 3], (a, e, i) => a + e * i), 9); }); (0, ava_1.default)("foldMap", t => { t.is((0, index_1.foldMap)(["2", "3", "4"], (a, b) => a + b, parseFloat, 2), 11); t.is((0, index_1.foldMap)([true, false, false], (a, b) => a.substr(0, a.length - 1) + b.substr(1), String, "jam"), "jarualsalse"); t.is((0, index_1.foldMap)(["2"], (a, b) => a + b, parseFloat, 0), 2); }); (0, ava_1.default)("contains", t => { t.true((0, index_1.contains)([1, 2, 3], 1)); t.false((0, index_1.contains)([1, 2, 3], 0)); }); (0, ava_1.default)("lastIndexOf", t => { t.is((0, index_1.lastIndexOf)([1, 2, 3, 4, 3, 2, 1], 3), 4); }); (0, ava_1.default)("findIndex", t => { t.is((0, index_1.findIndex)([1, 2, 3, 4, 3, 2, 1], n => n >= 3), 2); }); (0, ava_1.default)("findLastIndex", t => { t.is((0, index_1.findLastIndex)([1, 2, 3, 4, 3, 2, 1], n => n >= 3), 4); }); (0, ava_1.default)("find", t => { t.is((0, index_1.find)([1, 2, 3, 4, 3, 2, 1], n => n >= 3), 3); }); (0, ava_1.default)("findLast", t => { t.is((0, index_1.findLast)([1, 2, 3, 4, 5, 2, 1], n => n >= 3), 5); }); (0, ava_1.default)("maximum", t => { t.is((0, index_1.maximum)([1, 2, 3]), 3); t.is((0, index_1.maximum)([1, 2, 3, 4, 3, 2, 1]), 4); t.is((0, index_1.maximum)([]), null); }); (0, ava_1.default)("minimum", t => { t.is((0, index_1.minimum)([1, 2, 3]), 1); t.is((0, index_1.minimum)([2, 3, 4, 1, 2, 3]), 1); t.is((0, index_1.minimum)([]), null); }); (0, ava_1.default)("sum", t => { t.is((0, index_1.sum)([1, 2, 3]), 6); t.is((0, index_1.sum)([]), 0); }); (0, ava_1.default)("product", t => { t.is((0, index_1.product)([1, 2, 3]), 6); t.is((0, index_1.product)([]), 1); }); (0, ava_1.default)("and", t => { t.true((0, index_1.and)([true, true, true])); t.false((0, index_1.and)([true, false, true])); t.true((0, index_1.and)([])); }); (0, ava_1.default)("or", t => { t.true((0, index_1.or)([true, false, true])); t.false((0, index_1.or)([false, false, false])); t.false((0, index_1.or)([])); }); (0, ava_1.default)("any", t => { t.true((0, index_1.any)([1, 2, 3], e => e > 2)); t.false((0, index_1.any)([1, 2, 3], e => e > 4)); }); (0, ava_1.default)("all", t => { t.true((0, index_1.all)([1, 2, 3], e => e < 4)); t.false((0, index_1.all)([1, 2, 3], e => e > 2)); const mixed1 = [1, 2, "hello", 3, "goodbye"]; const mixed2 = [1, 2, 3]; const acceptNumbers = (array) => true; const isNumber = (v) => typeof v === "number"; t.false((0, index_1.all)(mixed1, isNumber)); t.true((0, index_1.all)(mixed2, isNumber)); t.false((0, index_1.all)(mixed1, isNumber) ? acceptNumbers(mixed1) : false); t.true((0, index_1.all)(mixed2, isNumber) ? acceptNumbers(mixed2) : false); }); (0, ava_1.default)("concat", t => { t.deepEqual((0, index_1.concat)([[1, 2], [], [3], [4, 5]]), [1, 2, 3, 4, 5]); t.deepEqual((0, index_1.concat)([[], []]), []); }); (0, ava_1.default)("prepend", t => { t.deepEqual((0, index_1.prepend)([1, 2, 3])([4, 5, 6]), [1, 2, 3, 4, 5, 6]); t.deepEqual((0, index_1.prepend)([])([4, 5, 6]), [4, 5, 6]); t.deepEqual((0, index_1.prepend)([1, 2, 3])([]), [1, 2, 3]); }); (0, ava_1.default)("append", t => { t.deepEqual((0, index_1.append)([4, 5, 6])([1, 2, 3]), [1, 2, 3, 4, 5, 6]); t.deepEqual((0, index_1.append)([])([1, 2, 3]), [1, 2, 3]); t.deepEqual((0, index_1.append)([4, 5, 6])([]), [4, 5, 6]); }); (0, ava_1.default)("concatMap", t => { t.deepEqual((0, index_1.concatMap)(["1,2,3", "4,5,6"], s => s.split(",")), ["1", "2", "3", "4", "5", "6"]); }); (0, ava_1.default)("scan", t => { t.deepEqual((0, index_1.scan)([1, 2, 3], (a, e, i) => a + e * i, 0), [0, 2, 8]); t.deepEqual((0, index_1.scan)(["a", "b", "c"], (a, e, i) => `${a} ${i} ${e}`, "_"), ["_ 0 a", "_ 0 a 1 b", "_ 0 a 1 b 2 c"]); }); (0, ava_1.default)("scan1", t => { t.deepEqual((0, index_1.scan1)([1, 2, 3], (a, e, i) => a + e * i), [1, 3, 9]); }); (0, ava_1.default)("scanRight", t => { t.deepEqual((0, index_1.scanRight)(["a", "b", "c"], (a, e, i) => `${a} ${i} ${e}`, "_"), ["_ 2 c 1 b 0 a", "_ 2 c 1 b", "_ 2 c"]); }); (0, ava_1.default)("scanRight1", t => { t.deepEqual((0, index_1.scanRight1)(["a", "b", "c"], (a, e, i) => `${a} ${i} ${e}`), ["c 1 b 0 a", "c 1 b", "c"]); }); (0, ava_1.default)("split", t => { t.deepEqual((0, index_1.split)([2, 1, 3, 4, 5, 6], 2), [ [2, 1], [3, 4, 5, 6] ]); t.deepEqual((0, index_1.split)([2, 1, 3, 4, 5, 6], 0), [[], [2, 1, 3, 4, 5, 6]]); t.deepEqual((0, index_1.split)([2, 1, 3, 4, 5, 6], 10), [[2, 1, 3, 4, 5, 6], []]); }); function isSuccess(result) { return result.type === "success"; } (0, ava_1.default)("partition", t => { t.deepEqual((0, index_1.partition)([2, 1, 3, 4, 5, 6], e => e % 2 === 1), [ [1, 3, 5], [2, 4, 6] ]); t.deepEqual((0, index_1.partition)(["abc", "def", "ghi"], (_, i) => i % 2 === 0), [["abc", "ghi"], ["def"]]); const results = [ { type: "success", value: "hello" }, { type: "error" }, { type: "success", value: "goodbye" } ]; const partitionedResults = (0, index_1.partition)(results, isSuccess); t.deepEqual(partitionedResults, [ [ { type: "success", value: "hello" }, { type: "success", value: "goodbye" } ], [{ type: "error" }] ]); }); (0, ava_1.default)("partitionWhile", t => { t.deepEqual((0, index_1.partitionWhile)([1, 3, 2, 4, 5, 6], e => e % 2 === 1), [ [1, 3], [2, 4, 5, 6] ]); t.deepEqual((0, index_1.partitionWhile)(["abc", "def", "ghi"], (_, i) => i % 2 === 0), [["abc"], ["def", "ghi"]]); const results = [ { type: "success", value: "hello" }, { type: "error" }, { type: "success", value: "goodbye" } ]; const partitionedResults = (0, index_1.partitionWhile)(results, isSuccess); t.deepEqual(partitionedResults, [ [{ type: "success", value: "hello" }], [{ type: "error" }, { type: "success", value: "goodbye" }] ]); }); (0, ava_1.default)("zip", t => { t.deepEqual((0, index_1.zip)([1, 2, 3], [6, 5, 4, 3, 2, 1]), [ [1, 6], [2, 5], [3, 4] ]); }); (0, ava_1.default)("keyBy", t => { const map = (0, index_1.keyBy)([1, 3, 4, 2, 5, 6], e => (e % 2 === 0 ? "even" : "odd")); t.deepEqual(map.get("even"), [4, 2, 6]); t.deepEqual(map.get("odd"), [1, 3, 5]); t.deepEqual(Array.from(map.keys()), ["odd", "even"]); }); (0, ava_1.default)("keyFirstBy", t => { const map = (0, index_1.keyFirstBy)([1, 3, 4, 2, 5, 6], e => (e % 2 === 0 ? "even" : "odd")); t.is(map.get("even"), 4); t.is(map.get("odd"), 1); t.deepEqual(Array.from(map.keys()), ["odd", "even"]); }); (0, ava_1.default)("keyLastBy", t => { const map = (0, index_1.keyLastBy)([1, 3, 4, 2, 5, 6], e => (e % 2 === 0 ? "even" : "odd")); t.is(map.get("even"), 6); t.is(map.get("odd"), 5); t.deepEqual(Array.from(map.keys()), ["odd", "even"]); }); (0, ava_1.default)("mapKeyBy", t => { const map = (0, index_1.mapKeyBy)([1, 3, 4, 2, 5, 6], e => [e % 2 === 0 ? "even" : "odd", String(e)]); t.deepEqual(map.get("even"), ["4", "2", "6"]); t.deepEqual(map.get("odd"), ["1", "3", "5"]); t.deepEqual(Array.from(map.keys()), ["odd", "even"]); }); (0, ava_1.default)("mapKeyFirstBy", t => { const map = (0, index_1.mapKeyFirstBy)([1, 3, 4, 2, 5, 6], e => [e % 2 === 0 ? "even" : "odd", String(e)]); t.is(map.get("even"), "4"); t.is(map.get("odd"), "1"); t.deepEqual(Array.from(map.keys()), ["odd", "even"]); }); (0, ava_1.default)("mapKeyLastBy", t => { const map = (0, index_1.mapKeyLastBy)([1, 3, 4, 2, 5, 6], e => [e % 2 === 0 ? "even" : "odd", String(e)]); t.deepEqual(Array.from(map.entries()), [ ["odd", "5"], ["even", "6"] ]); }); (0, ava_1.default)("groupByIdentity", t => { t.deepEqual((0, index_1.groupByIdentity)(["abc", "adef", "bghi"], a => a.substr(0, 1)), [["abc", "adef"], ["bghi"]]); }); (0, ava_1.default)("sort", t => { t.deepEqual((0, index_1.sort)([2, 4, 3, 1]), [1, 2, 3, 4]); t.deepEqual((0, index_1.sort)(["hello", "goodbye"]), ["goodbye", "hello"]); t.deepEqual((0, index_1.sort)([-2, 4, -3, 1], (a, b) => Math.abs(a) - Math.abs(b)), [1, -2, -3, 4]); }); (0, ava_1.default)("sortBy", t => { t.deepEqual((0, index_1.sortBy)([ { x: "a", y: 2 }, { x: "b", y: 4 }, { x: "c", y: 3 }, { x: "d", y: 1 } ], ({ y }) => y), [ { x: "d", y: 1 }, { x: "a", y: 2 }, { x: "c", y: 3 }, { x: "b", y: 4 } ]); t.deepEqual((0, index_1.sortBy)([-2, 4, -3, 1], e => Math.abs(e)), [1, -2, -3, 4]); }); (0, ava_1.default)("forEach", t => { const a = ["a", "b", "c"]; let s = ""; const b = (0, index_1.forEach)(a, c => (s += c)); t.is(b, a); t.is(s, "abc"); }); //# sourceMappingURL=index.test.js.map