| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- // These tests are to make sure the following:
- // o[i] = ...
- // ... = o.x -- make sure that we don't hoist the load of o.x,
- // if previous call to o[i] has a chance to kill some o.x.
- // Access via o.x (use NaN)
- function test1() {
- var a = {};
- var r;
- a.NaN = "orig";
- for (var i = 0; i < 1; ++i) {
- r = a.NaN;
- i = Math.pow(1, Infinity); // Get NaN which val we know to be a Number.
- a[i] = "new"; // This will kill a.NaN.
- r = a.NaN; // This must cause a reload.
- }
- return r;
- }
- // Access via o.x (use Infinity)
- function test2() {
- var a = {};
- var r;
- a.Infinity = "orig";
- for (var i = 0; i < 1; ++i) {
- r = a.Infinity;
- i = 1 / 0; // Get Infinity which val we know to be a Number.
- a[i] = "new"; // This will kill a.Infinity.
- r = a.Infinity; // This must cause a reload.
- }
- return r;
- }
- // Access via o["x"] (use -Infinity)
- function test3() {
- var a = {};
- a[-Infinity] = "orig";
- var r;
- for (var i = 0; i > -1; --i) {
- r = a["-Infinity"];
- i = -1 / 0;
- a[i] = "new";
- r = a["-Infinity"];
- }
- return r;
- }
- // Access fia o["x"], use float number
- function test4() {
- var a = {};
- var r;
- a[1.23] = "orig";
- for (var i = 1; i < 2; ++i) {
- r = a[1.23];
- i = 1 + 0.23;
- a[i] = "new"; // This will kill a[1.23].
- r = a["1.23"]; // This must cause a reload.
- }
- return r;
- }
- // Access via o[x] (use NaN)
- function test5() {
- var a = {};
- var r;
- a.NaN = "orig";
- for (var i = 0; i < 1; ++i) {
- r = a.NaN;
- i = Math.pow(1, Infinity); // Get a NaN that which val we know to be a Number.
- a[i] = "new"; // This will kill a.NaN.
- r = a[NaN]; // This must cause a reload.
- }
- return r;
- }
- // Access via o[x] (use float number)
- function test6() {
- var a = {};
- var r;
- a[1.23] = "orig";
- for (var i = 1; i < 2; ++i) {
- r = a[1.23];
- i = 1 + 0.23;
- a[i] = "new"; // This will kill a[1.23].
- r = a[1.23]; // This must cause a reload.
- }
- return r;
- }
- var isPass = true;
- function reportError(arg1, arg2) {
- WScript.Echo(arg1, arg2);
- isPass = false;
- }
- var expected = "new";
- var r1 = test1();
- var r2 = test2();
- var r3 = test3();
- var r4 = test4();
- var r5 = test5();
- var r6 = test6();
- if (r1 != expected) reportError("bug: r1 =", r1);
- if (r2 != expected) reportError("bug: r2 =", r2);
- if (r3 != expected) reportError("bug: r3 =", r3);
- if (r4 != expected) reportError("bug: r4 =", r4);
- if (r5 != expected) reportError("bug: r5 =", r5);
- if (r6 != expected) reportError("bug: r6 =", r6);
- if (isPass) WScript.Echo("PASS");
|