summaryrefslogtreecommitdiffstats
path: root/js/src/tests/js1_8/extensions/regress-417131.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/js1_8/extensions/regress-417131.js')
-rw-r--r--js/src/tests/js1_8/extensions/regress-417131.js76
1 files changed, 76 insertions, 0 deletions
diff --git a/js/src/tests/js1_8/extensions/regress-417131.js b/js/src/tests/js1_8/extensions/regress-417131.js
new file mode 100644
index 000000000..1f80246a2
--- /dev/null
+++ b/js/src/tests/js1_8/extensions/regress-417131.js
@@ -0,0 +1,76 @@
+// |reftest| skip
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 417131;
+var summary = 'stress test for cache';
+var actual = '';
+var expect = '';
+
+
+//-----------------------------------------------------------------------------
+test();
+//-----------------------------------------------------------------------------
+
+function test()
+{
+ enterFunc ('test');
+ printBugNumber(BUGNUMBER);
+ printStatus (summary);
+
+ function f(N)
+ {
+ for (var i = 0; i != N; ++i) {
+ var obj0 = {}, obj1 = {}, obj2 = {};
+ obj1['a'+i] = 0;
+ obj2['b'+i] = 0;
+ obj2['b'+(i+1)] = 1;
+ for (var repeat = 0;repeat != 2; ++repeat) {
+ var count = 0;
+ for (var j in obj1) {
+ if (j !== 'a'+i)
+ throw "Bad:"+j;
+ for (var k in obj2) {
+ if (i == Math.floor(N/3) || i == Math.floor(2*N/3))
+ gc();
+ var expected;
+ switch (count) {
+ case 0: expected='b'+i; break;
+ case 1: expected='b'+(i+1); break;
+ default:
+ throw "Bad count: "+count;
+ }
+ if (expected != k)
+ throw "Bad k, expected="+expected+", actual="+k;
+ for (var l in obj0)
+ ++count;
+ ++count;
+ }
+ }
+ if (count !== 2)
+ throw "Bad count: "+count;
+ }
+ }
+ }
+
+ var array = [function() { f(10); },
+ function() { f(50); },
+ function() { f(200); },
+ function() { f(400); }
+ ];
+
+ if (typeof scatter == "function") {
+ scatter(array);
+ } else {
+ for (var i = 0; i != array.length; ++i)
+ array[i]();
+ }
+
+
+ reportCompare(expect, actual, summary);
+
+ exitFunc ('test');
+}