import { allEquals } from "./allEquals"; import { ReduceArguments, toReduceArguments } from "./reduceify"; export function arrSameAs( arr: readonly ArrOf[], otherArr: readonly ArrOf[], areSame: (e1: ArrOf, e2: ArrOf) => boolean = (e1, e2) => e1 === e2 ): boolean { if (![arr, otherArr] .map(({ length }) => length) .reduce(...allEquals()) ) { return false; } for (let i = 0; i < arr.length; i++) { if (!areSame(arr[i], otherArr[i])) { return false; } } return true; } export function sameAs( otherArr: readonly ArrOf[], areSame?: (e1: ArrOf, e2: ArrOf) => boolean ): ReduceArguments { return toReduceArguments(arrSameAs, otherArr, areSame); } export function sameAsFactory({ areEquals }: { areEquals: (e1: T, e2: T) => boolean; }) { return { "sameAs": (otherArr: readonly ArrOf[]) => sameAs(otherArr, areEquals) }; }