]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - tests/stress/multi-put-by-offset-reallocation-butterfly-cse.js
JavaScriptCore-7600.1.4.9.tar.gz
[apple/javascriptcore.git] / tests / stress / multi-put-by-offset-reallocation-butterfly-cse.js
diff --git a/tests/stress/multi-put-by-offset-reallocation-butterfly-cse.js b/tests/stress/multi-put-by-offset-reallocation-butterfly-cse.js
new file mode 100644 (file)
index 0000000..d283f3f
--- /dev/null
@@ -0,0 +1,102 @@
+var foos = [
+    function(o) { o[0] = 5; o.ff = 42; o[0] = 6; },
+    function(o) { o[0] = 5; o.ff = 42; o[0] = 6; },
+    function(o) { o[0] = 5; o.ff = 42; o[0] = 6; },
+    function(o) { o[0] = 5; o.ff = 42; o[0] = 6; },
+    function(o) { o[0] = 5; o.ff = 42; o[0] = 6; },
+    function(o) { o[0] = 5; o.ff = 42; o[0] = 6; },
+    function(o) { o[0] = 5; o.ff = 42; o[0] = 6; },
+    function(o) { o[0] = 5; o.ff = 42; o[0] = 6; }
+];
+
+if (foos.length != 8)
+    throw "Error";
+
+function bar(o, n) {
+    if (n == 0)
+        return;
+    o.na = 1;
+    if (n == 1)
+        return;
+    o.nb = 2;
+    if (n == 2)
+        return;
+    o.nc = 3;
+    if (n == 3)
+        return;
+    o.nd = 4;
+    if (n == 4)
+        return;
+    o.ne = 5;
+    if (n == 5)
+        return;
+    o.nf = 6;
+    if (n == 6)
+        return;
+    o.ng = 7;
+    if (n == 7)
+        return;
+    o.nh = 8;
+}
+
+function baz(o, n) {
+    if (n == 0)
+        return;
+    if (o.na != 1)
+        throw "Memory corruption; have o.na = " + o.na;
+    if (n == 1)
+        return;
+    if (o.nb != 2)
+        throw "Memory corruption";
+    if (n == 2)
+        return;
+    if (o.nc != 3)
+        throw "Memory corruption";
+    if (n == 3)
+        return;
+    if (o.nd != 4)
+        throw "Memory corruption";
+    if (n == 4)
+        return;
+    if (o.ne != 5)
+        throw "Memory corruption";
+    if (n == 5)
+        return;
+    if (o.nf != 6)
+        throw "Memory corruption";
+    if (n == 6)
+        return;
+    if (o.ng != 7)
+        throw "Memory corruption";
+    if (n == 7)
+        return;
+    if (o.nh != 8)
+        throw "Memory corruption";
+}
+
+for (var i = 0; i < 8; ++i)
+    noInline(foos[i]);
+noInline(bar);
+
+for (var i = 0; i < 100000; ++i) {
+    var o = {};
+    var p = {a:1, b:2, c:3, d:4, e:5, f:6};
+    o[0] = 0;
+    p[0] = 0;
+    bar(o, i % 8);
+    bar(p, i % 8);
+    
+    foos[i % 8](o);
+    foos[i % 8](p);
+    
+    if (o.ff != 42)
+        throw "Bad result in o: " + o.ff;
+    if (p.ff != 42)
+        throw "Bad result in o: " + p.ff;
+    
+    if (p.a != 1 || p.b != 2 || p.c != 3 || p.d != 4 || p.e != 5 || p.f != 6)
+        throw "Memory corruption"
+    baz(o, i % 8);
+    baz(p, i % 8);
+}
+