diff --git a/src/utilities/utility_functions.js b/src/utilities/utility_functions.js index ed8b3faf88..7c8c0b4200 100644 --- a/src/utilities/utility_functions.js +++ b/src/utilities/utility_functions.js @@ -720,8 +720,7 @@ function utilityFunctions(p5, fn) { * } */ fn.shuffle = function (arr, modify) { - const isView = ArrayBuffer && ArrayBuffer.isView && ArrayBuffer.isView(arr); - arr = modify || isView ? arr : arr.slice(); + arr = modify ? arr : arr.slice(); let rnd, tmp, diff --git a/test/unit/utilities/utility_functions.js b/test/unit/utilities/utility_functions.js index cfdd1bb7a7..632e3954dd 100644 --- a/test/unit/utilities/utility_functions.js +++ b/test/unit/utilities/utility_functions.js @@ -150,5 +150,38 @@ suite('String functions', function () { assert.strictEqual(newArr.length, regularArr.length); assert.strictEqual(flag, true); }); + + test('should not modify regular array by default', function () { + const original = [1, 2, 3, 4, 5, 6, 7, 8]; + const copy = [...original]; + const result = mockP5Prototype.shuffle(original); + assert.notStrictEqual(result, original); + assert.deepEqual(original, copy); + assert.strictEqual(result.length, original.length); + }); + + test('should modify regular array in place when modify is true', function () { + const original = [1, 2, 3, 4, 5, 6, 7, 8]; + const result = mockP5Prototype.shuffle(original, true); + assert.strictEqual(result, original); + }); + + test('should not modify typed array by default and return a copy', function () { + const original = new Float32Array([1, 2, 3, 4, 5, 6, 7, 8]); + const initialCopy = Array.from(original); + const result = mockP5Prototype.shuffle(original); + assert.instanceOf(result, Float32Array); + assert.notStrictEqual(result, original); + assert.deepEqual(Array.from(original), initialCopy); + assert.strictEqual(result.length, original.length); + assert.deepEqual(Array.from(result).sort(), initialCopy.sort()); + }); + + test('should modify typed array in place when modify is true', function () { + const original = new Float32Array([1, 2, 3, 4, 5, 6, 7, 8]); + const result = mockP5Prototype.shuffle(original, true); + assert.instanceOf(result, Float32Array); + assert.strictEqual(result, original); + }); }); });