// Flags: --expose-internals 'use strict'; require('../common'); const assert = require('assert'); const { ArrayOfApply, ArrayPrototypePushApply, ArrayPrototypeUnshiftApply, MathMaxApply, MathMinApply, StringPrototypeConcatApply, TypedArrayOfApply, } = require('internal/test/binding').primordials; { const arr1 = [1, 2, 3]; const arr2 = ArrayOfApply(arr1); assert.deepStrictEqual(arr2, arr1); assert.notStrictEqual(arr2, arr1); } { const array = [1, 2, 3]; const i32Array = TypedArrayOfApply(Int32Array, array); assert(i32Array instanceof Int32Array); assert.strictEqual(i32Array.length, array.length); for (let i = 0, { length } = array; i < length; i++) { assert.strictEqual(i32Array[i], array[i], `i32Array[${i}] === array[${i}]`); } } { const arr1 = [1, 2, 3]; const arr2 = [4, 5, 6]; const expected = [...arr1, ...arr2]; assert.strictEqual(ArrayPrototypePushApply(arr1, arr2), expected.length); assert.deepStrictEqual(arr1, expected); } { const arr1 = [1, 2, 3]; const arr2 = [4, 5, 6]; const expected = [...arr2, ...arr1]; assert.strictEqual(ArrayPrototypeUnshiftApply(arr1, arr2), expected.length); assert.deepStrictEqual(arr1, expected); } { const array = [1, 2, 3]; assert.strictEqual(MathMaxApply(array), 3); assert.strictEqual(MathMinApply(array), 1); } { let hint; const obj = { [Symbol.toPrimitive](h) { hint = h; return '[object Object]'; } }; const args = ['foo ', obj, ' bar']; const result = StringPrototypeConcatApply('', args); assert.strictEqual(hint, 'string'); assert.strictEqual(result, 'foo [object Object] bar'); }