PASS 'use strict'; (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (arguments[0] = 42);
})(0, 1, 2, 3); is 42
PASS (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (arguments[0] = 42);
})(0, 1, 2, 3); is 42
PASS true === true
PASS 'use strict'; (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (delete arguments[0]);
})(0, 1, 2, 3); is true
PASS (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (delete arguments[0]);
})(0, 1, 2, 3); is true
PASS true === true
PASS 'use strict'; (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (arguments[1] = 42);
})(0, 1, 2, 3); threw exception of type TypeError.
PASS (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (arguments[1] = 42);
})(0, 1, 2, 3); is 42
PASS true === true
PASS 'use strict'; (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (delete arguments[1]);
})(0, 1, 2, 3); is true
PASS (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (delete arguments[1]);
})(0, 1, 2, 3); is true
PASS true === true
PASS 'use strict'; (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (arguments[2] = 42);
})(0, 1, 2, 3); is 42
PASS (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (arguments[2] = 42);
})(0, 1, 2, 3); is 42
PASS true === true
PASS 'use strict'; (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (delete arguments[2]);
})(0, 1, 2, 3); threw exception of type TypeError.
PASS (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (delete arguments[2]);
})(0, 1, 2, 3); is false
PASS true === true
PASS 'use strict'; (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (arguments[3] = 42);
})(0, 1, 2, 3); threw exception of type TypeError.
PASS (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (arguments[3] = 42);
})(0, 1, 2, 3); is 42
PASS true === true
PASS 'use strict'; (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (delete arguments[3]);
})(0, 1, 2, 3); threw exception of type TypeError.
PASS (function f() {
Object.defineProperties(arguments, {1: { writable: false },
                                    2: { configurable: false },
                                    3: { writable: false,
                                        configurable: false }});
return (delete arguments[3]);
})(0, 1, 2, 3); is false
PASS true === true
 PASSED! 
PASS successfullyParsed is true

TEST COMPLETE

