1fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
2fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
3fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org//
4fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// Redistribution and use in source and binary forms, with or without
5fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// modification, are permitted provided that the following conditions
6fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// are met:
7fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// 1.  Redistributions of source code must retain the above copyright
8fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org//     notice, this list of conditions and the following disclaimer.
9fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// 2.  Redistributions in binary form must reproduce the above copyright
10fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org//     notice, this list of conditions and the following disclaimer in the
11fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org//     documentation and/or other materials provided with the distribution.
12fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org//
13fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
24fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgdescription(
25fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org"This page tests for assertion failures in edge cases of property lookup on primitive values."
26fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org);
27fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
28fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar didNotCrash = true;
29fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
30fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org(function () {
31fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    delete String.prototype.constructor;
32fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    for (var i = 0; i < 3; ++i)
33fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org        "".replace;
34fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org})();
35fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
36fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org(function () {
37fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    String.prototype.__proto__ = { x: 1, y: 1 };
38fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    delete String.prototype.__proto__.x;
39fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    for (var i = 0; i < 3; ++i)
40fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org        "".y;
41fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org})();
42fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
43fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org(function () {
44fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    function f(x) {
45fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org        x.y;
46fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    }
47fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
48fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    String.prototype.x = 1;
49fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    String.prototype.y = 1;
50fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    delete String.prototype.x;
51fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
52fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    Number.prototype.x = 1;
53fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    Number.prototype.y = 1;
54fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    delete Number.prototype.x;
55fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
56fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    for (var i = 0; i < 3; ++i)
57fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org        f("");
58fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
59fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    for (var i = 0; i < 3; ++i)
60fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org        f(.5);
61fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org})();
62fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
63fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
64fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar checkOkay;
65fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
66fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkGet(x, constructor)
67fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
68fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    checkOkay = false;
69fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    Object.defineProperty(constructor.prototype, "foo", { get: function() { checkOkay = typeof this === 'object'; }, configurable: true });
70fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    x.foo;
71fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    delete constructor.prototype.foo;
72fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return checkOkay;
73fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
74fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
75fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkSet(x, constructor)
76fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
77fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    checkOkay = false;
78fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    Object.defineProperty(constructor.prototype, "foo", { set: function() { checkOkay = typeof this === 'object'; }, configurable: true });
79fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    x.foo = null;
80fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    delete constructor.prototype.foo;
81fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return checkOkay;
82fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
83fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
84fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkGetStrict(x, constructor)
85fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
86fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    checkOkay = false;
87fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    Object.defineProperty(constructor.prototype, "foo", { get: function() { "use strict"; checkOkay = typeof this !== 'object'; }, configurable: true });
88fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    x.foo;
89fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    delete constructor.prototype.foo;
90fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return checkOkay;
91fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
92fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
93fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkSetStrict(x, constructor)
94fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
95fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    checkOkay = false;
96fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    Object.defineProperty(constructor.prototype, "foo", { set: function() { "use strict"; checkOkay = typeof this !== 'object'; }, configurable: true });
97fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    x.foo = null;
98fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    delete constructor.prototype.foo;
99fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return checkOkay;
100fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
101fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
102fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkGet(1, Number)");
103fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkGet('hello', String)");
104fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkGet(true, Boolean)");
105fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkSet(1, Number)");
106fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkSet('hello', String)");
107fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkSet(true, Boolean)");
108fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkGetStrict(1, Number)");
109fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkGetStrict('hello', String)");
110fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkGetStrict(true, Boolean)");
111fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkSetStrict(1, Number)");
112fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkSetStrict('hello', String)");
113fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkSetStrict(true, Boolean)");
114fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
115fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkRead(x, constructor)
116fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
117fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return x.foo === undefined;
118fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
119fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
120fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkWrite(x, constructor)
121fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
122fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    x.foo = null;
123fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return x.foo === undefined;
124fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
125fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
126fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkReadStrict(x, constructor)
127fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
128fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    "use strict";
129fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return x.foo === undefined;
130fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
131fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
132fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkWriteStrict(x, constructor)
133fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
134fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    "use strict";
135fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    x.foo = null;
136fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return x.foo === undefined;
137fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
138fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
139fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkRead(1, Number)");
140fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkRead('hello', String)");
141fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkRead(true, Boolean)");
142fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkWrite(1, Number)");
143fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkWrite('hello', String)");
144fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkWrite(true, Boolean)");
145fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkReadStrict(1, Number)");
146fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkReadStrict('hello', String)");
147fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkReadStrict(true, Boolean)");
148fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldThrow("checkWriteStrict(1, Number)");
149fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldThrow("checkWriteStrict('hello', String)");
150fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldThrow("checkWriteStrict(true, Boolean)");
151fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
152fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericGet(x, constructor)
153fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
154fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    checkOkay = false;
155fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    Object.defineProperty(constructor.prototype, 42, { get: function() { checkOkay = typeof this === 'object'; }, configurable: true });
156fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    x[42];
157fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    delete constructor.prototype[42];
158fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return checkOkay;
159fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
160fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
161fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericSet(x, constructor)
162fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
163fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    checkOkay = false;
164fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    Object.defineProperty(constructor.prototype, 42, { set: function() { checkOkay = typeof this === 'object'; }, configurable: true });
165fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    x[42] = null;
166fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    delete constructor.prototype[42];
167fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return checkOkay;
168fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
169fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
170fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericGetStrict(x, constructor)
171fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
172fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    checkOkay = false;
173fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    Object.defineProperty(constructor.prototype, 42, { get: function() { "use strict"; checkOkay = typeof this !== 'object'; }, configurable: true });
174fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    x[42];
175fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    delete constructor.prototype[42];
176fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return checkOkay;
177fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
178fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
179fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericSetStrict(x, constructor)
180fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
181fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    checkOkay = false;
182fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    Object.defineProperty(constructor.prototype, 42, { set: function() { "use strict"; checkOkay = typeof this !== 'object'; }, configurable: true });
183fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    x[42] = null;
184fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    delete constructor.prototype[42];
185fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return checkOkay;
186fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
187fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
188fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericGet(1, Number)");
189fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericGet('hello', String)");
190fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericGet(true, Boolean)");
191fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericSet(1, Number)");
192fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericSet('hello', String)");
193fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericSet(true, Boolean)");
194fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericGetStrict(1, Number)");
195fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericGetStrict('hello', String)");
196fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericGetStrict(true, Boolean)");
197fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericSetStrict(1, Number)");
198fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericSetStrict('hello', String)");
199fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericSetStrict(true, Boolean)");
200fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
201fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericRead(x, constructor)
202fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
203fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return x[42] === undefined;
204fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
205fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
206fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericWrite(x, constructor)
207fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
208fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    x[42] = null;
209fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return x[42] === undefined;
210fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
211fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
212fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericReadStrict(x, constructor)
213fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
214fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    "use strict";
215fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return x[42] === undefined;
216fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
217fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
218fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericWriteStrict(x, constructor)
219fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{
220fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    "use strict";
221fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    x[42] = null;
222fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org    return x[42] === undefined;
223fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org}
224fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
225fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericRead(1, Number)");
226fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericRead('hello', String)");
227fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericRead(true, Boolean)");
228fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericWrite(1, Number)");
229fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericWrite('hello', String)");
230fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericWrite(true, Boolean)");
231fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericReadStrict(1, Number)");
232fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericReadStrict('hello', String)");
233fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericReadStrict(true, Boolean)");
234fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldThrow("checkNumericWriteStrict(1, Number)");
235fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldThrow("checkNumericWriteStrict('hello', String)");
236fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldThrow("checkNumericWriteStrict(true, Boolean)");
237fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org
238fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("didNotCrash");
239