All files filter.js

88.24% Statements 30/34
40% Branches 2/5
80.95% Functions 17/21
100% Lines 14/14
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22        3x   3x 27x 3x 45x 45x   544x 21x 25x   3x 345x 11x 3x 9x  
import { asSet, filter, map, some, spread, } from 'fenugreek-collections';
import { Compare, } from 'game_grid';
import { isFree, samePlayer, } from './node';
 
const { samePos } = Compare;
 
export const nextFree = nArr => spread(nArr).find(isFree);
export const lastFree = nArr => spread(nArr).reverse().find(isFree);
export const hasFree = nArr => some(nArr)(isFree);
export const byPlayer = nArr => (player = null) =>
  filter(nArr)(samePlayer({ player }));
 
export const exceeds = lim => coll => asSet(coll).size > lim;
export const anyExceed = lim => coll => some(coll)(exceeds(lim));
export const byExcess = lim => arrays => filter(arrays)(exceeds(lim));
 
export const callIf = fn => boolFn => n => boolFn(n) ? fn(n) : n;
export const repIf = next => boolFn => n => boolFn(n) ? next : n;
export const repPos = next => repIf(next)(samePos(next));
export const repID = next => repIf(next)(samePos(next));
export const replace = next => nArr => map(nArr)(repPos(next));