X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/2d39b0e377c0896910ee49ae70082ba665faf986..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/tests/stress/for-in-tests.js diff --git a/tests/stress/for-in-tests.js b/tests/stress/for-in-tests.js new file mode 100644 index 0000000..fc6258e --- /dev/null +++ b/tests/stress/for-in-tests.js @@ -0,0 +1,100 @@ +(function() { + // Iterate over an array with normal indexed properties. + var foo = function() { + var a = [1, 2, 3, 4, 5]; + var sum = 0; + var result = ""; + for (var p in a) + result += a[p]; + return result; + }; + noInline(foo); + for (var i = 0; i < 10000; ++i) { + if (foo() !== "12345") + throw new Error("bad result"); + } + foo(null); +})(); +(function() { + // Iterate over an object with normal non-indexed properties. + var foo = function() { + var o = {}; + o.x = 1; + o.y = 2; + o.z = 3; + var result = ""; + for (var p in o) + result += o[p]; + return result; + }; + noInline(foo); + for (var i = 0; i < 10000; ++i) { + if (foo() !== "123") + throw new Error("bad result"); + } + foo(null); +})(); +(function() { + // Iterate over an object with both indexed and non-indexed properties. + var foo = function() { + var o = {}; + o.x = 1; + o.y = 2; + o.z = 3; + o[0] = 4; + o[1] = 5; + o[2] = 6; + var result = ""; + for (var p in o) + result += o[p]; + return result; + }; + noInline(foo); + for (var i = 0; i < 10000; ++i) { + if (foo() != "456123") + throw new Error("bad result"); + } + foo(null); +})(); +(function() { + // Iterate over an array with both indexed and non-indexed properties. + var foo = function() { + var a = [4, 5, 6]; + a.x = 1; + a.y = 2; + a.z = 3; + var result = ""; + for (var p in a) + result += a[p]; + return result; + }; + noInline(foo); + for (var i = 0; i < 10000; ++i) { + if (foo() !== "456123") + throw new Error("bad result"); + } + foo(null); +})(); +(function() { + var foo = function(a, b) { + for (var p in b) { + var f1 = a[p]; + var f2 = b[p]; + if (f1 === f2) + continue; + a[p] = b[p]; + } + }; + noInline(foo); + for (var i = 0; i < 10000; ++i) { + var o1 = {}; + var o2 = {}; + o2.x = 42; + o2.y = 53; + foo(o1, o2); + if (o1.x !== o2.x) + throw new Error("bad result: " + o1.x + "!==" + o2.x); + if (o1.y !== o2.y) + throw new Error("bad result: " + o1.y + "!==" + o2.y); + } +})();