function shouldBe(actual, expected) {
    if (actual !== expected)
        throw new Error('bad value: ' + describe(actual) + ', expected: ' + describe(expected));
}

function shouldThrow(func, message) {
    var error = null;
    try {
        func();
    } catch (e) {
        error = e;
    }
    if (!error)
        throw new Error('not thrown. Expected: ' + message);
    if (String(error) !== message)
        throw new Error('bad error: ' + String(error) + ', expected: ' + message);
}

function unreachable()
{
    throw new Error('unreachable');
}

function receiverTest(object, receiver)
{
    shouldBe(Reflect.set(object, 'Cocoa', 42, receiver), true);
    shouldBe(Reflect.get(receiver, 'Cocoa'), 42);
    shouldBe(Reflect.get(object, 'Cocoa'), undefined);

    // Existing.
    shouldBe(Reflect.set(object, 'Matcha', 40), true);
    shouldBe(Reflect.get(object, 'Matcha'), 40);
    shouldBe(Reflect.set(object, 'Matcha', 42, receiver), true);
    shouldBe(Reflect.get(receiver, 'Matcha'), 42);
    shouldBe(Reflect.get(object, 'Matcha'), 40);

    // Existing non writable own descriptor.
    Reflect.defineProperty(object, 'Cappuccino', {
        value: 'nice',
        writable: false
    });
    shouldBe(Reflect.set(object, 'Cappuccino', 42, receiver), false);
    shouldBe(Reflect.get(receiver, 'Cappuccino'), undefined);
    shouldBe(receiver.hasOwnProperty('Cappuccino'), false);
    shouldBe(Reflect.get(object, 'Cappuccino'), 'nice');

    // Existing non writable receiver descriptor.
    Reflect.defineProperty(receiver, 'Kilimanjaro', {
        value: 'good',
        writable: false
    });
    shouldBe(Reflect.set(object, 'Kilimanjaro', 42, receiver), false);
    shouldBe(Reflect.get(receiver, 'Kilimanjaro'), 'good');
    shouldBe(receiver.hasOwnProperty('Kilimanjaro'), true);
    shouldBe(Reflect.get(object, 'Kilimanjaro'), undefined);
    shouldBe(object.hasOwnProperty('Kilimanjaro'), false);

    shouldBe(Reflect.set(object, 'Kilimanjaro', 42, 'receiver'), false);

    // Receiver accessors.
    shouldBe(Reflect.defineProperty(receiver, 'Mocha', {
        get()
        {
            return 42;
        },
        configurable: true
    }), true);
    shouldBe(Reflect.set(object, 'Mocha', 42, receiver), false);
    shouldBe(Reflect.defineProperty(receiver, 'Mocha', {
        set(value)
        {
            unreachable();
        },
        configurable: true
    }), true);
    shouldBe(Reflect.set(object, 'Mocha', 42, receiver), false);
    shouldBe(receiver.value, undefined);
    shouldBe(Reflect.defineProperty(object, 'Mocha', {
        get(value)
        {
        },
        configurable: true
    }), true);
    shouldBe(Reflect.set(object, 'Mocha', 42, receiver), false);
    shouldBe(receiver.value, undefined);
    shouldBe(Reflect.defineProperty(object, 'Mocha', {
        set(value)
        {
            shouldBe(this, receiver);
            this.value = value;
        },
        configurable: true
    }), true);
    shouldBe(Reflect.set(object, 'Mocha', 42, receiver), true);
    shouldBe(receiver.value, 42);
    shouldBe(object.value, undefined);
}

function receiverTestIndexed(object, receiver)
{
    shouldBe(Reflect.set(object, 11, 42, receiver), true);
    shouldBe(Reflect.get(receiver, 11), 42);
    shouldBe(Reflect.get(object, 11), undefined);

    // Existing.
    shouldBe(Reflect.set(object, 12, 40), true);
    shouldBe(Reflect.get(object, 12), 40);
    shouldBe(Reflect.set(object, 12, 42, receiver), true);
    shouldBe(Reflect.get(receiver, 12), 42);
    shouldBe(Reflect.get(object, 12), 40);

    // Existing non writable own descriptor.
    Reflect.defineProperty(object, 13, {
        value: 'nice',
        writable: false
    });
    shouldBe(Reflect.set(object, 13, 42, receiver), false);
    shouldBe(Reflect.get(receiver, 13), undefined);
    shouldBe(receiver.hasOwnProperty(13), false);
    shouldBe(Reflect.get(object, 13), 'nice');

    // Existing non writable receiver descriptor.
    Reflect.defineProperty(receiver, 14, {
        value: 'good',
        writable: false
    });
    shouldBe(Reflect.set(object, 14, 42, receiver), false);
    shouldBe(Reflect.get(receiver, 14), 'good');
    shouldBe(receiver.hasOwnProperty(14), true);
    shouldBe(Reflect.get(object, 14), undefined);
    shouldBe(object.hasOwnProperty(14), false);

    // Receiver is a primitive value.
    shouldBe(Reflect.set(object, 14, 42, 'receiver'), false);

    // Receiver accessors.
    shouldBe(Reflect.defineProperty(receiver, 15, {
        get()
        {
            return 42;
        },
        configurable: true
    }), true);
    shouldBe(Reflect.set(object, 15, 42, receiver), false);
    shouldBe(Reflect.defineProperty(receiver, 15, {
        set(value)
        {
            unreachable();
        },
        configurable: true
    }), true);
    shouldBe(Reflect.set(object, 15, 42, receiver), false);
    shouldBe(receiver.value, undefined);
    shouldBe(Reflect.defineProperty(object, 15, {
        get(value)
        {
        },
        configurable: true
    }), true);
    shouldBe(Reflect.set(object, 15, 42, receiver), false);
    shouldBe(receiver.value, undefined);
    shouldBe(Reflect.defineProperty(object, 15, {
        set(value)
        {
            shouldBe(this, receiver);
            this.value = value;
        },
        configurable: true
    }), true);
    shouldBe(Reflect.set(object, 15, 42, receiver), true);
    shouldBe(receiver.value, 42);
    shouldBe(object.value, undefined);
}

shouldBe(Reflect.set.length, 3);

shouldThrow(() => {
    Reflect.set('hello', 'hello', 42);
}, `TypeError: Reflect.set requires the first argument be an object`);

var symbol = Symbol();

(function simpleReceiverCase() {
    var receiver = {};
    var object = {
    };

    shouldBe(Reflect.set(object, 'Cocoa', 42, receiver), true);
    shouldBe(Reflect.get(object, 'Cocoa'), undefined);
    shouldBe(Reflect.get(receiver, 'Cocoa'), 42);

    var object2 = {
        set Cocoa(value) {
            print(value);
            shouldBe(this, receiver);
            this.value = value;
        }
    };
    shouldBe(Reflect.set(object, 'Cocoa', 42, receiver), true);
    shouldBe(Reflect.get(object, 'Cocoa'), undefined);
    shouldBe(Reflect.get(receiver, 'Cocoa'), 42);
}());

(function objectCase() {
    'use strict';
    var object = {};
    shouldBe(Reflect.get(object, 'hello'), undefined);
    shouldBe(Reflect.set(object, 'hello', 42), true);
    shouldBe(Reflect.get(object, 'hello'), 42);
    shouldBe(Reflect.get(object, 0), undefined);
    shouldBe(Reflect.set(object, 0, 42), true);
    shouldBe(Reflect.get(object, 0), 42);
    shouldBe(Reflect.get(object, symbol), undefined);
    shouldBe(Reflect.set(object, symbol, 42), true);
    shouldBe(Reflect.get(object, symbol), 42);

    var object = {};
    shouldBe(Reflect.defineProperty(object, 'hello', {
        value: 'Cocoa',
        writable: false
    }), true);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.set(object, 'hello', 42), false);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, 0, {
        value: 'Cocoa',
        writable: false
    }), true);
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.set(object, 0, 42), false);
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, symbol, {
        value: 'Cocoa',
        writable: false
    }), true);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');
    shouldBe(Reflect.set(object, symbol, 42), false);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');

    var object = {};
    shouldBe(Reflect.defineProperty(object, 'hello', {
        get() {
            return 'Cocoa';
        },
        set() {
        }
    }), true);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.set(object, 'hello', 42), true);  // Return true since the setter exists.
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, 0, {
        get() {
            return 'Cocoa';
        },
        set() {
        }
    }), true);
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.set(object, 0, 42), true);  // Return true since the setter exists.
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, symbol, {
        get() {
            return 'Cocoa';
        },
        set() {
        }
    }), true);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');
    shouldBe(Reflect.set(object, symbol, 42), true);  // Return true since the setter exists.
    shouldBe(Reflect.get(object, symbol), 'Cocoa');

    var object = {};
    shouldBe(Reflect.defineProperty(object, 'hello', {
        get() {
            return 'Cocoa';
        }
    }), true);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.set(object, 'hello', 42), false);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, 0, {
        get() {
            return 'Cocoa';
        }
    }), true);
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.set(object, 0, 42), false);
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, symbol, {
        get() {
            return 'Cocoa';
        }
    }), true);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');
    shouldBe(Reflect.set(object, symbol, 42), false);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');

    receiverTest({}, {});
    receiverTestIndexed({}, {});
}());

(function arrayCase() {
    'use strict';
    var object = [];
    shouldBe(Reflect.get(object, 'hello'), undefined);
    shouldBe(Reflect.set(object, 'hello', 42), true);
    shouldBe(Reflect.get(object, 'hello'), 42);
    shouldBe(Reflect.get(object, 0), undefined);
    shouldBe(Reflect.set(object, 0, 42), true);
    shouldBe(Reflect.get(object, 0), 42);
    shouldBe(Reflect.get(object, symbol), undefined);
    shouldBe(Reflect.set(object, symbol, 42), true);
    shouldBe(Reflect.get(object, symbol), 42);
    object[1000000] = 'Hello';
    shouldBe(Reflect.set(object, 0, 50), true);
    shouldBe(Reflect.get(object, 0), 50);

    var object = [];
    shouldBe(Reflect.defineProperty(object, 'hello', {
        value: 'Cocoa',
        writable: false
    }), true);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.set(object, 'hello', 42), false);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, 0, {
        value: 'Cocoa',
        writable: false
    }), true);
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.set(object, 0, 42), false);
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(object.length, 1);
    shouldBe(Reflect.defineProperty(object, symbol, {
        value: 'Cocoa',
        writable: false
    }), true);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');
    shouldBe(Reflect.set(object, symbol, 42), false);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');

    // Length.
    var object = [];
    shouldBe(Reflect.get(object, 'length'), 0);
    shouldThrow(() => {
        Reflect.set(object, 'length', 'Cappuccino');
    }, `RangeError: Invalid array length`);
    shouldBe(Reflect.get(object, 'length'), 0);

    var object = [];
    shouldBe(Reflect.get(object, 'length'), 0);
    shouldBe(Reflect.set(object, 'length', 20), true);
    shouldBe(Reflect.get(object, 'length'), 20);

    var object = [];
    Object.freeze(object);
    shouldBe(Reflect.get(object, 'length'), 0);
    shouldBe(Reflect.set(object, 'length', 20), false);
    shouldBe(Reflect.get(object, 'length'), 0);

    var object = [];
    shouldBe(Reflect.defineProperty(object, 'hello', {
        get() {
            return 'Cocoa';
        },
        set() {
        }
    }), true);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.set(object, 'hello', 42), true);  // Return true since the setter exists.
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, 0, {
        get() {
            return 'Cocoa';
        },
        set() {
        }
    }), true);
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.set(object, 0, 42), true);  // Return true since the setter exists.
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, symbol, {
        get() {
            return 'Cocoa';
        },
        set() {
        }
    }), true);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');
    shouldBe(Reflect.set(object, symbol, 42), true);  // Return true since the setter exists.
    shouldBe(Reflect.get(object, symbol), 'Cocoa');

    var object = [];
    shouldBe(Reflect.defineProperty(object, 'hello', {
        get() {
            return 'Cocoa';
        }
    }), true);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.set(object, 'hello', 42), false);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, 0, {
        get() {
            return 'Cocoa';
        }
    }), true);
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.set(object, 0, 42), false);
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, symbol, {
        get() {
            return 'Cocoa';
        }
    }), true);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');
    shouldBe(Reflect.set(object, symbol, 42), false);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');

    receiverTest([], []);
    receiverTest({}, []);
    receiverTest([], {});
    receiverTestIndexed([], []);
    receiverTestIndexed({}, []);
    receiverTestIndexed([], {});

    var array = [0, 1, 2, 3];
    var receiver = {};
    shouldBe(Reflect.set(array, 'length', 'V', receiver), true);
    shouldBe(Reflect.get(receiver, 'length'), 'V');
    shouldBe(receiver.hasOwnProperty('length'), true);
    shouldBe(Reflect.get(array, 'length'), 4);
    Object.freeze(array);
    var receiver = {};
    shouldBe(Reflect.set(array, 'length', 'V', receiver), false);
    shouldBe(Reflect.get(receiver, 'length'), undefined);
    shouldBe(receiver.hasOwnProperty('length'), false);
    shouldBe(Reflect.get(array, 'length'), 4);
}());

(function arrayBufferCase() {
    'use strict';
    var object = new ArrayBuffer(64);
    shouldBe(Reflect.get(object, 'hello'), undefined);
    shouldBe(Reflect.set(object, 'hello', 42), true);
    shouldBe(Reflect.get(object, 'hello'), 42);
    shouldBe(Reflect.get(object, 0), undefined);
    shouldBe(Reflect.set(object, 0, 42), true);
    shouldBe(Reflect.get(object, 0), 42);
    shouldBe(Reflect.get(object, symbol), undefined);
    shouldBe(Reflect.set(object, symbol, 42), true);
    shouldBe(Reflect.get(object, symbol), 42);
    object[1000000] = 'Hello';
    shouldBe(Reflect.set(object, 0, 50), true);
    shouldBe(Reflect.get(object, 0), 50);

    var object = new ArrayBuffer(64);
    shouldBe(Reflect.defineProperty(object, 'hello', {
        value: 'Cocoa',
        writable: false
    }), true);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.set(object, 'hello', 42), false);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, 0, {
        value: 'Cocoa',
        writable: false
    }), true);
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.set(object, 0, 42), false);
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(object.length, undefined);
    shouldBe(Reflect.defineProperty(object, symbol, {
        value: 'Cocoa',
        writable: false
    }), true);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');
    shouldBe(Reflect.set(object, symbol, 42), false);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');

    var object = new ArrayBuffer(64);
    shouldBe(Reflect.get(object, 'byteLength'), 64);
    shouldBe(Reflect.set(object, 'byteLength', 'Cappuccino'), false);
    shouldBe(Reflect.get(object, 'byteLength'), 64);

    var object = new ArrayBuffer(64);
    shouldBe(Reflect.get(object, 'byteLength'), 64);
    shouldBe(Reflect.set(object, 'byteLength', 2000), false);
    shouldBe(Reflect.get(object, 'byteLength'), 64);

    var object = new ArrayBuffer(64);
    shouldBe(Reflect.defineProperty(object, 'byteLength', {
        writable: false
    }), true);
    shouldBe(Reflect.get(object, 'byteLength'), undefined);
    shouldBe(Reflect.set(object, 'byteLength', 20), false);
    shouldBe(Reflect.get(object, 'byteLength'), undefined);

    var object = new ArrayBuffer(64);
    shouldBe(Reflect.defineProperty(object, 'hello', {
        get() {
            return 'Cocoa';
        },
        set() {
        }
    }), true);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.set(object, 'hello', 42), true);  // Return true since the setter exists.
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, 0, {
        get() {
            return 'Cocoa';
        },
        set() {
        }
    }), true);
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.set(object, 0, 42), true);  // Return true since the setter exists.
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, symbol, {
        get() {
            return 'Cocoa';
        },
        set() {
        }
    }), true);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');
    shouldBe(Reflect.set(object, symbol, 42), true);  // Return true since the setter exists.
    shouldBe(Reflect.get(object, symbol), 'Cocoa');

    var object = new ArrayBuffer(64);
    shouldBe(Reflect.defineProperty(object, 'hello', {
        get() {
            return 'Cocoa';
        }
    }), true);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.set(object, 'hello', 42), false);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, 0, {
        get() {
            return 'Cocoa';
        }
    }), true);
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.set(object, 0, 42), false);
    shouldBe(Reflect.get(object, 0), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, symbol, {
        get() {
            return 'Cocoa';
        }
    }), true);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');
    shouldBe(Reflect.set(object, symbol, 42), false);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');

    receiverTest(new ArrayBuffer(64), new ArrayBuffer(64));
    receiverTest({}, new ArrayBuffer(64));
    receiverTest(new ArrayBuffer(64), {});
    receiverTestIndexed(new ArrayBuffer(64), new ArrayBuffer(64));
    receiverTestIndexed({}, new ArrayBuffer(64));
    receiverTestIndexed(new ArrayBuffer(64), {});
}());

[
    [ Uint8Array, 1 ],
    [ Uint8ClampedArray, 1],
    [ Uint16Array, 2 ],
    [ Uint32Array, 4 ],
    [ Int8Array, 1 ],
    [ Int16Array, 2 ],
    [ Int32Array, 4 ],
    [ Float32Array, 4 ],
    [ Float64Array, 8 ],
].forEach((function() {
    'use strict';
    return function typedArrayCase([ TypedArray, bytesPerElement ]) {
        var object = new TypedArray(64);
        shouldBe(Reflect.get(object, 'hello'), undefined);
        shouldBe(Reflect.set(object, 'hello', 42), true);
        shouldBe(Reflect.get(object, 'hello'), 42);
        shouldBe(Reflect.get(object, 0), 0);
        shouldBe(Reflect.set(object, 0, 42), true);
        shouldBe(Reflect.get(object, 0), 42);
        shouldBe(Reflect.get(object, symbol), undefined);
        shouldBe(Reflect.set(object, symbol, 42), true);
        shouldBe(Reflect.get(object, symbol), 42);
        object[1000000] = 'Hello';
        shouldBe(Reflect.set(object, 0, 50), true);
        shouldBe(Reflect.get(object, 0), 50);

        var object = new TypedArray(64);
        shouldBe(Reflect.defineProperty(object, 'hello', {
            value: 'Cocoa',
            writable: false
        }), true);
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.set(object, 'hello', 42), false);
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.defineProperty(object, 0, {
            value: 'Cocoa',
            writable: false
        }), false);
        shouldBe(Reflect.get(object, 0), 0);
        shouldBe(Reflect.set(object, 0, 42), true);
        shouldBe(Reflect.get(object, 0), 42);
        shouldBe(object.length, 64);
        shouldBe(Reflect.defineProperty(object, symbol, {
            value: 'Cocoa',
            writable: false
        }), true);
        shouldBe(Reflect.get(object, symbol), 'Cocoa');
        shouldBe(Reflect.set(object, symbol, 42), false);
        shouldBe(Reflect.get(object, symbol), 'Cocoa');

        var object = new TypedArray(64);
        shouldBe(Reflect.get(object, 'byteLength'), bytesPerElement * 64);
        shouldBe(Reflect.set(object, 'byteLength', 'Cappuccino'), false);
        shouldBe(Reflect.get(object, 'byteLength'), bytesPerElement * 64);

        var object = new TypedArray(64);
        shouldBe(Reflect.get(object, 'byteLength'), bytesPerElement * 64);
        shouldBe(Reflect.set(object, 'byteLength', 2000), false);
        shouldBe(Reflect.get(object, 'byteLength'), bytesPerElement * 64);

        var object = new TypedArray(64);
        shouldBe(Reflect.defineProperty(object, 'hello', {
            get() {
                return 'Cocoa';
            },
            set() {
            }
        }), true);
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.set(object, 'hello', 42), true);  // Return true since the setter exists.
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.defineProperty(object, 0, {
            get() {
                return 'Cocoa';
            },
            set() {
            }
        }), false);
        shouldBe(Reflect.get(object, 0), 0);
        shouldBe(Reflect.set(object, 0, 42), true);  // Return true since the setter exists.
        shouldBe(Reflect.get(object, 0), 42);
        shouldBe(Reflect.defineProperty(object, symbol, {
            get() {
                return 'Cocoa';
            },
            set() {
            }
        }), true);
        shouldBe(Reflect.get(object, symbol), 'Cocoa');
        shouldBe(Reflect.set(object, symbol, 42), true);  // Return true since the setter exists.
        shouldBe(Reflect.get(object, symbol), 'Cocoa');

        var object = new TypedArray(64);
        shouldBe(Reflect.defineProperty(object, 'hello', {
            get() {
                return 'Cocoa';
            }
        }), true);
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.set(object, 'hello', 42), false);
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.defineProperty(object, 0, {
            get() {
                return 'Cocoa';
            }
        }), false);
        shouldBe(Reflect.get(object, 0), 0);
        shouldBe(Reflect.set(object, 0, 42), true);
        shouldBe(Reflect.get(object, 0), 42);
        shouldBe(Reflect.defineProperty(object, symbol, {
            get() {
                return 'Cocoa';
            }
        }), true);
        shouldBe(Reflect.get(object, symbol), 'Cocoa');
        shouldBe(Reflect.set(object, symbol, 42), false);
        shouldBe(Reflect.get(object, symbol), 'Cocoa');

        receiverTest(new TypedArray(64), new TypedArray(64));
        receiverTest(new TypedArray(64), {});
        receiverTest({}, new TypedArray(64));

        var object = new TypedArray(64);
        var receiver = {};
        // The receiver is ignored when the property name is an indexed one.
        // shouldBe(Reflect.set(object, 0, 42, receiver), true);
        shouldBe(Reflect.set(object, 0, 42, receiver), true);
        shouldBe(Reflect.get(object, 0), 42);
        shouldBe(receiver.hasOwnProperty(0), false);

        var object = new TypedArray(1);
        transferArrayBuffer(object.buffer);
        shouldBe(Reflect.set(object, 0, 42), true);
        shouldBe(Reflect.get(object, 0), undefined);
    };
})());


(function argumentCase() {
    function test1() {
        var object = arguments;
        shouldBe(Reflect.get(object, 'hello'), undefined);
        shouldBe(Reflect.set(object, 'hello', 42), true);
        shouldBe(Reflect.get(object, 'hello'), 42);
        shouldBe(Reflect.get(object, 0), undefined);
        shouldBe(Reflect.set(object, 0, 42), true);
        shouldBe(Reflect.get(object, 0), 42);
        shouldBe(Reflect.get(object, symbol), undefined);
        shouldBe(Reflect.set(object, symbol, 42), true);
        shouldBe(Reflect.get(object, symbol), 42);
    }

    function test2() {
        var object = arguments;
        shouldBe(Reflect.defineProperty(object, 'hello', {
            value: 'Cocoa',
            writable: false
        }), true);
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.set(object, 'hello', 42), false);
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.defineProperty(object, 0, {
            value: 'Cocoa',
            writable: false
        }), true);
        shouldBe(Reflect.get(object, 0), 'Cocoa');
        shouldBe(Reflect.set(object, 0, 42), false);
        shouldBe(Reflect.get(object, 0), 'Cocoa');
        shouldBe(object.length, 0);
        shouldBe(Reflect.defineProperty(object, symbol, {
            value: 'Cocoa',
            writable: false
        }), true);
        shouldBe(Reflect.get(object, symbol), 'Cocoa');
        shouldBe(Reflect.set(object, symbol, 42), false);
        shouldBe(Reflect.get(object, symbol), 'Cocoa');
    }

    function test3() {
        var object = arguments;
        shouldBe(Reflect.get(object, 'length'), 0);
        Reflect.set(object, 'length', 'Cappuccino');
        shouldBe(Reflect.get(object, 'length'), 'Cappuccino');

        Reflect.set(object, 'callee', 'Cappuccino');
        shouldBe(Reflect.get(object, 'callee'), 'Cappuccino');
    }

    function test4() {
        var object = arguments;
        shouldBe(Reflect.defineProperty(object, 'hello', {
            get() {
                return 'Cocoa';
            },
            set() {
            }
        }), true);
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.set(object, 'hello', 42), true);  // Return true since the setter exists.
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.defineProperty(object, 0, {
            get() {
                return 'Cocoa';
            },
            set() {
            }
        }), true);
        shouldBe(Reflect.get(object, 0), 'Cocoa');
        shouldBe(Reflect.set(object, 0, 42), true);  // Return true since the setter exists.
        shouldBe(Reflect.get(object, 0), 'Cocoa');
        shouldBe(Reflect.defineProperty(object, symbol, {
            get() {
                return 'Cocoa';
            },
            set() {
            }
        }), true);
        shouldBe(Reflect.get(object, symbol), 'Cocoa');
        shouldBe(Reflect.set(object, symbol, 42), true);  // Return true since the setter exists.
        shouldBe(Reflect.get(object, symbol), 'Cocoa');
    }

    function test5() {
        var object = arguments;
        shouldBe(Reflect.defineProperty(object, 'hello', {
            get() {
                return 'Cocoa';
            }
        }), true);
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.set(object, 'hello', 42), false);
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.defineProperty(object, 0, {
            get() {
                return 'Cocoa';
            }
        }), true);
        shouldBe(Reflect.get(object, 0), 'Cocoa');
        shouldBe(Reflect.set(object, 0, 42), false);
        shouldBe(Reflect.get(object, 0), 'Cocoa');
        shouldBe(Reflect.defineProperty(object, symbol, {
            get() {
                return 'Cocoa';
            }
        }), true);
        shouldBe(Reflect.get(object, symbol), 'Cocoa');
        shouldBe(Reflect.set(object, symbol, 42), false);
        shouldBe(Reflect.get(object, symbol), 'Cocoa');
    }

    test1();
    test2();
    test3();
    test4();
    test5();

    function getArguments() { return arguments; }

    receiverTest(getArguments(), getArguments());
    receiverTest({}, getArguments());
    receiverTest(getArguments(), {});
    receiverTestIndexed(getArguments(), getArguments());
    receiverTestIndexed({}, getArguments());
    receiverTestIndexed(getArguments(), {});

    var args = getArguments(0, 1, 2);
    var receiver = {};
    shouldBe(Reflect.set(args, 0, 'V', receiver), true);
    shouldBe(Reflect.get(receiver, 0), 'V');
    shouldBe(Reflect.set(args, 'length', 'V', receiver), true);
    shouldBe(Reflect.get(receiver, 'length'), 'V');
}());

(function argumentStrictCase() {
    'use strict';
    function test1() {
        var object = arguments;
        shouldBe(Reflect.get(object, 'hello'), undefined);
        shouldBe(Reflect.set(object, 'hello', 42), true);
        shouldBe(Reflect.get(object, 'hello'), 42);
        shouldBe(Reflect.get(object, 0), undefined);
        shouldBe(Reflect.set(object, 0, 42), true);
        shouldBe(Reflect.get(object, 0), 42);
        shouldBe(Reflect.get(object, symbol), undefined);
        shouldBe(Reflect.set(object, symbol, 42), true);
        shouldBe(Reflect.get(object, symbol), 42);
    }

    function test2() {
        var object = arguments;
        shouldBe(Reflect.defineProperty(object, 'hello', {
            value: 'Cocoa',
            writable: false
        }), true);
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.set(object, 'hello', 42), false);
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.defineProperty(object, 0, {
            value: 'Cocoa',
            writable: false
        }), true);
        shouldBe(Reflect.get(object, 0), 'Cocoa');
        shouldBe(Reflect.set(object, 0, 42), false);
        shouldBe(Reflect.get(object, 0), 'Cocoa');
        shouldBe(object.length, 0);
        shouldBe(Reflect.defineProperty(object, symbol, {
            value: 'Cocoa',
            writable: false
        }), true);
        shouldBe(Reflect.get(object, symbol), 'Cocoa');
        shouldBe(Reflect.set(object, symbol, 42), false);
        shouldBe(Reflect.get(object, symbol), 'Cocoa');
    }

    function test3() {
        var object = arguments;
        shouldBe(Reflect.get(object, 'length'), 0);
        Reflect.set(object, 'length', 'Cappuccino');
        shouldBe(Reflect.get(object, 'length'), 'Cappuccino');

        shouldThrow(() => {
            Reflect.set(object, 'callee', 'Cappuccino');
        }, `TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in this context.`);
        shouldThrow(() => {
            Reflect.get(object, 'callee');
        }, `TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in this context.`);
    }

    function test4() {
        var object = arguments;
        shouldBe(Reflect.defineProperty(object, 'hello', {
            get() {
                return 'Cocoa';
            },
            set() {
            }
        }), true);
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.set(object, 'hello', 42), true);  // Return true since the setter exists.
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.defineProperty(object, 0, {
            get() {
                return 'Cocoa';
            },
            set() {
            }
        }), true);
        shouldBe(Reflect.get(object, 0), 'Cocoa');
        shouldBe(Reflect.set(object, 0, 42), true);  // Return true since the setter exists.
        shouldBe(Reflect.get(object, 0), 'Cocoa');
        shouldBe(Reflect.defineProperty(object, symbol, {
            get() {
                return 'Cocoa';
            },
            set() {
            }
        }), true);
        shouldBe(Reflect.get(object, symbol), 'Cocoa');
        shouldBe(Reflect.set(object, symbol, 42), true);  // Return true since the setter exists.
        shouldBe(Reflect.get(object, symbol), 'Cocoa');
    }

    function test5() {
        var object = arguments;
        shouldBe(Reflect.defineProperty(object, 'hello', {
            get() {
                return 'Cocoa';
            }
        }), true);
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.set(object, 'hello', 42), false);
        shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
        shouldBe(Reflect.defineProperty(object, 0, {
            get() {
                return 'Cocoa';
            }
        }), true);
        shouldBe(Reflect.get(object, 0), 'Cocoa');
        shouldBe(Reflect.set(object, 0, 42), false);
        shouldBe(Reflect.get(object, 0), 'Cocoa');
        shouldBe(Reflect.defineProperty(object, symbol, {
            get() {
                return 'Cocoa';
            }
        }), true);
        shouldBe(Reflect.get(object, symbol), 'Cocoa');
        shouldBe(Reflect.set(object, symbol, 42), false);
        shouldBe(Reflect.get(object, symbol), 'Cocoa');
    }

    test1();
    test2();
    test3();
    test4();
    test5();

    function getArguments() { return arguments; }

    receiverTest(getArguments(), getArguments());
    receiverTest({}, getArguments());
    receiverTest(getArguments(), {});
    receiverTestIndexed(getArguments(), getArguments());
    receiverTestIndexed({}, getArguments());
    receiverTestIndexed(getArguments(), {});

    var args = getArguments(0, 1, 2);
    var receiver = {};
    shouldBe(Reflect.set(args, 0, 'V', receiver), true);
    shouldBe(Reflect.get(receiver, 0), 'V');
    shouldBe(Reflect.set(args, 'length', 'V', receiver), true);
    shouldBe(Reflect.get(receiver, 'length'), 'V');
}());

(function stringObjectCase() {
    'use strict';
    var object = new String('Cocoa');
    shouldBe(Reflect.get(object, 'hello'), undefined);
    shouldBe(Reflect.set(object, 'hello', 42), true);
    shouldBe(Reflect.get(object, 'hello'), 42);
    shouldBe(Reflect.get(object, 0), 'C');
    shouldBe(Reflect.set(object, 0, 42), false);
    shouldBe(Reflect.get(object, 0), 'C');
    shouldBe(Reflect.get(object, symbol), undefined);
    shouldBe(Reflect.set(object, symbol, 42), true);
    shouldBe(Reflect.get(object, symbol), 42);
    object[1000000] = 'Cocoa';
    shouldBe(Reflect.set(object, 0, 50), false);
    shouldBe(Reflect.get(object, 0), 'C');

    var object = new String('Cocoa');
    shouldBe(Reflect.defineProperty(object, 'hello', {
        value: 'Cocoa',
        writable: false
    }), true);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.set(object, 'hello', 42), false);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, 0, {
        value: 'Cocoa',
        writable: false
    }), false);
    shouldBe(Reflect.get(object, 0), 'C');
    shouldBe(Reflect.set(object, 0, 42), false);
    shouldBe(Reflect.get(object, 0), 'C');
    shouldBe(object.length, 5);
    shouldBe(Reflect.defineProperty(object, symbol, {
        value: 'Cocoa',
        writable: false
    }), true);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');
    shouldBe(Reflect.set(object, symbol, 42), false);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');

    // Length.
    var object = new String('Cocoa');
    shouldBe(Reflect.get(object, 'length'), 5);
    shouldBe(Reflect.set(object, 'length', 'Cappuccino'), false);
    shouldBe(Reflect.get(object, 'length'), 5);

    var object = new String('Cocoa');
    shouldBe(Reflect.get(object, 'length'), 5);
    shouldBe(Reflect.set(object, 'length', 20), false);
    shouldBe(Reflect.get(object, 'length'), 5);

    var object = new String('Cocoa');
    Object.freeze(object);
    shouldBe(Reflect.get(object, 'length'), 5);
    shouldBe(Reflect.set(object, 'length', 20), false);
    shouldBe(Reflect.get(object, 'length'), 5);

    var object = new String('Cocoa');
    shouldBe(Reflect.defineProperty(object, 'hello', {
        get() {
            return 'Cocoa';
        },
        set() {
        }
    }), true);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.set(object, 'hello', 42), true);  // Return true since the setter exists.
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, 0, {
        get() {
            return 'Cocoa';
        },
        set() {
        }
    }), false);
    shouldBe(Reflect.get(object, 0), 'C');
    shouldBe(Reflect.set(object, 0, 42), false);  // Return true since the setter exists.
    shouldBe(Reflect.get(object, 0), 'C');
    shouldBe(Reflect.defineProperty(object, symbol, {
        get() {
            return 'Cocoa';
        },
        set() {
        }
    }), true);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');
    shouldBe(Reflect.set(object, symbol, 42), true);  // Return true since the setter exists.
    shouldBe(Reflect.get(object, symbol), 'Cocoa');

    var object = new String('Cocoa');
    shouldBe(Reflect.defineProperty(object, 'hello', {
        get() {
            return 'Cocoa';
        }
    }), true);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.set(object, 'hello', 42), false);
    shouldBe(Reflect.get(object, 'hello'), 'Cocoa');
    shouldBe(Reflect.defineProperty(object, 0, {
        get() {
            return 'Cocoa';
        }
    }), false);
    shouldBe(Reflect.get(object, 0), 'C');
    shouldBe(Reflect.set(object, 0, 42), false);
    shouldBe(Reflect.get(object, 0), 'C');
    shouldBe(Reflect.defineProperty(object, symbol, {
        get() {
            return 'Cocoa';
        }
    }), true);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');
    shouldBe(Reflect.set(object, symbol, 42), false);
    shouldBe(Reflect.get(object, symbol), 'Cocoa');

    receiverTest(new String('Hello'), new String('World'));
    receiverTest({}, new String('World'));
    receiverTest(new String('Hello'), {});
    // Tested indice should be out of range of the string object.
    receiverTestIndexed(new String('Hello'), new String('World'));
    receiverTestIndexed({}, new String('World'));
    receiverTestIndexed(new String('Hello'), {});

    var string = new String('Hello');
    var receiver = {};
    shouldBe(Reflect.set(string, 0, 'V', receiver), false);
    shouldBe(Reflect.get(receiver, 0), undefined);
    shouldBe(receiver.hasOwnProperty(0), false);
    shouldBe(Reflect.set(string, 'length', 'V', receiver), false);
    shouldBe(Reflect.get(receiver, 'length'), undefined);
    shouldBe(receiver.hasOwnProperty('length'), false);
}());

(function regExpCase() {
    receiverTest(/hello/, /world/);
    receiverTest({}, /world/);
    receiverTest(/hello/, {});
    receiverTestIndexed(/hello/, /world/);
    receiverTestIndexed({}, /world/);
    receiverTestIndexed(/hello/, {});
}());

(function regExpMultiline() {
    function test1() {
        shouldBe(Reflect.set(RegExp, 'multiline', 'Cappuccino'), true);
        shouldBe(Reflect.get(RegExp, 'multiline'), true);
        shouldBe(Reflect.set(RegExp, 'multiline', 0), true);
        shouldBe(Reflect.get(RegExp, 'multiline'), false);

        var receiver = {};
        shouldThrow(() => Reflect.set(RegExp, 'multiline', 'Cappuccino', receiver), `TypeError: RegExp.multiline setters require RegExp constructor as |this|`);
        shouldBe(Reflect.get(receiver, 'multiline'), undefined);
        shouldBe(Reflect.get(RegExp, 'multiline'), false);
    }

    function test2() {
        'use strict';
        shouldBe(Reflect.set(RegExp, 'multiline', 'Cappuccino'), true);
        shouldBe(Reflect.get(RegExp, 'multiline'), true);
        shouldBe(Reflect.set(RegExp, 'multiline', 0), true);
        shouldBe(Reflect.get(RegExp, 'multiline'), false);

        var receiver = {};
        shouldThrow(() => Reflect.set(RegExp, 'multiline', 'Cappuccino', receiver), `TypeError: RegExp.multiline setters require RegExp constructor as |this|`);
        shouldBe(Reflect.get(receiver, 'multiline'), undefined);
        shouldBe(Reflect.get(RegExp, 'multiline'), false);
    }

    function test3() {
        'use strict';
        shouldBe(Reflect.defineProperty(RegExp, 'multiline', {
            writable: false
        }), true);
        shouldBe(Reflect.get(RegExp, 'multiline'), undefined);
        shouldBe(Reflect.set(RegExp, 'multiline', 'Cappuccino'), false);
        shouldBe(Reflect.get(RegExp, 'multiline'), undefined);
        shouldBe(Reflect.set(RegExp, 'multiline', 0), false);
        shouldBe(Reflect.get(RegExp, 'multiline'), undefined);

        var receiver = {};
        shouldBe(Reflect.set(RegExp, 'multiline', 'Cappuccino', receiver), false);
        shouldBe(Reflect.get(receiver, 'multiline'), undefined);
    }

    test1();
    test2();
    test3();
}());

(function regExpLastIndex() {
    var regexp = new RegExp('Cocoa');
    regexp.lastIndex = 'Hello';
    shouldBe(Reflect.get(regexp, 'lastIndex'), 'Hello');
    regexp.lastIndex = 42;
    shouldBe(Reflect.get(regexp, 'lastIndex'), 42);

    shouldBe(Reflect.set(regexp, 'lastIndex', 'Hello'), true);
    shouldBe(Reflect.get(regexp, 'lastIndex'), 'Hello');

    var receiver = {};
    shouldBe(Reflect.set(regexp, 'lastIndex', 'Cocoa', receiver), true);
    shouldBe(Reflect.get(receiver, 'lastIndex'), 'Cocoa');
    shouldBe(Reflect.get(regexp, 'lastIndex'), 'Hello');

    shouldBe(Reflect.defineProperty(regexp, 'lastIndex', {
        value: 42,
        writable: false
    }), true);
    shouldBe(Reflect.get(regexp, 'lastIndex'), 42);
    shouldBe(Reflect.set(regexp, 'lastIndex', 'Hello'), false);
    shouldBe(Reflect.get(regexp, 'lastIndex'), 42);

    var receiver = {};
    shouldBe(Reflect.set(regexp, 'lastIndex', 'Cocoa', receiver), false);
    shouldBe(Reflect.get(receiver, 'lastIndex'), undefined);
    shouldBe(Reflect.get(regexp, 'lastIndex'), 42);

    shouldThrow(function () {
        'use strict';
        regexp.lastIndex = 'NG';
    }, `TypeError: Attempted to assign to readonly property.`);
}());

(function customValue() {
    const Value = $vm.createCustomTestGetterSetter();
    function test1() {
        shouldBe(Reflect.set(Value, 'customValue2', 'Cappuccino'), true);
        shouldBe(Reflect.get(Value, 'customValue2'), 'Cappuccino');
        shouldBe(Reflect.set(Value, 'customValue2', 0), true);
        shouldBe(Reflect.get(Value, 'customValue2'), 0);

        var receiver = {};
        shouldBe(Reflect.set(Value, 'customValue2', 'Cappuccino', receiver), true);
        shouldBe(Reflect.get(receiver, 'customValue2'), 'Cappuccino');
        shouldBe(Reflect.get(Value, 'customValue2'), 0);
    }

    function test2() {
        'use strict';
        shouldBe(Reflect.set(Value, 'customValue2', 'Cappuccino'), true);
        shouldBe(Reflect.get(Value, 'customValue2'), 'Cappuccino');
        shouldBe(Reflect.set(Value, 'customValue2', 0), true);
        shouldBe(Reflect.get(Value, 'customValue2'), 0);

        var receiver = {};
        shouldBe(Reflect.set(Value, 'customValue2', 'Cappuccino', receiver), true);
        shouldBe(Reflect.get(receiver, 'customValue2'), 'Cappuccino');
        shouldBe(Reflect.get(Value, 'customValue2'), 0);
    }

    function test3() {
        'use strict';
        shouldBe(Reflect.defineProperty(Value, 'customValue2', {
            writable: false,
            value: undefined,
        }), true);
        shouldBe(Reflect.get(Value, 'customValue2'), undefined);
        shouldBe(Reflect.set(Value, 'customValue2', 'Cappuccino'), false);
        shouldBe(Reflect.get(Value, 'customValue2'), undefined);
        shouldBe(Reflect.set(Value, 'customValue2', 0), false);
        shouldBe(Reflect.get(Value, 'customValue2'), undefined);

        var receiver = {};
        shouldBe(Reflect.set(Value, 'customValue2', 'Cappuccino', receiver), false);
        shouldBe(Reflect.get(receiver, 'customValue2'), undefined);
    }

    test1();
    test2();
    test3();
}());

(function functionCase() {
    var func = function () { };
    shouldBe(Reflect.get(func, 'arguments'), null);
    shouldBe(Reflect.set(func, 'arguments', 42), true);
    shouldBe(Reflect.get(func, 'arguments'), null);

    shouldBe(Reflect.get(func, 'caller'), null);
    shouldBe(Reflect.set(func, 'caller', 42), true);
    shouldBe(Reflect.get(func, 'caller'), null);

    receiverTest(function () {}, function () {});
    receiverTest({}, function () {});
    receiverTest(function () {}, {});
    receiverTestIndexed(function () {}, function () {});
    receiverTestIndexed({}, function () {});
    receiverTestIndexed(function () {}, {});

    var receiver = {};
    shouldThrow(() => {
        Reflect.set(func, 'arguments', 'V', receiver);
    }, `TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in this context.`);
    shouldBe(Reflect.get(receiver, 'arguments'), undefined);
    shouldBe(receiver.hasOwnProperty('arguments'), false);
    shouldBe(Reflect.get(func, 'arguments'), null);

    shouldThrow(() => {
        Reflect.set(func, 'caller', 'V', receiver);
    }, `TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in this context.`);
    shouldBe(Reflect.get(receiver, 'caller'), undefined);
    shouldBe(receiver.hasOwnProperty('caller'), false);
    shouldBe(Reflect.get(func, 'caller'), null);
}());
