//@ skip if $architecture == "x86"
//@ if $architecture == "x86" then defaultSpotCheckNoMaximalFlush else defaultRun end

function assert(b) {
    if (!b)
        throw new Error("Bad!")
}
noInline(assert);

let calledGet = false;
let definedAccessor = false;
function test() {
    function foo(...rest) {
        return rest;
    }
    noInline(foo);

    for (let i = 0; i < 10000; i++) {
        const size = 800;
        let arr = new Array(size);
        for (let i = 0; i < size; i++)
            arr[i] = i;
        let result = foo(...arr);

        assert(result.length === arr.length);
        assert(result.length === size);
        for (let i = 0; i < arr.length; i++) {
            assert(arr[i] === result[i]);
            assert(result[i] === i);
        }
        if (definedAccessor) {
            calledGet = false;
            result[0];
            assert(!calledGet);
            arr[0];
            assert(calledGet);

            let testArr = [...arr];
            calledGet = false;
            testArr[0];
            assert(!calledGet);
        }
    }
}
test();

definedAccessor = true;
Reflect.defineProperty(Array.prototype, "0", {
    get() { calledGet = true; return 0; },
    set(x) {  }
});
test();
