// Compares to Array objects for equality, ignoring order export function scrambledEqual(array1: readonly T[], array2: readonly T[]) { if (!array1) { throw new Error('missing first array'); } if (!array2) { throw new Error('missing second array'); } const sortedArray1 = sort(array1); const sortedArray2 = sort(array2); return sequenceEqual(sortedArray1, sortedArray2); function sort(array: readonly T[]) { return array.slice().sort(); } } // Compares to Array objects for equality in same order export function sequenceEqual(array1: readonly T[], array2: readonly T[]) { if (!array1) { throw new Error('missing first array'); } if (!array2) { throw new Error('missing second array'); } if (array1.length !== array2.length) { return false; } return array1.every((val, index) => val === array2[index]); }