summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/ion/bug991457.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/ion/bug991457.js')
-rw-r--r--js/src/jit-test/tests/ion/bug991457.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/ion/bug991457.js b/js/src/jit-test/tests/ion/bug991457.js
new file mode 100644
index 0000000000..6b9099ed2c
--- /dev/null
+++ b/js/src/jit-test/tests/ion/bug991457.js
@@ -0,0 +1,64 @@
+function test() {
+ this.init();
+ for (var i=0; i<10; i++) {
+ delete this.blocks[10][9];
+ this.collapse_blocks();
+ }
+ this.look_for_holes();
+}
+test.prototype.init = function() {
+ this.blocks = new Array(20);
+ for (var x=0; x<this.blocks.length; x++) {
+ this.blocks[x] = new Array(10);
+ for (var y=0; y<this.blocks[x].length; y++) {
+ this.blocks[x][y] = {};
+ }
+ }
+}
+test.prototype.move_block = function(x,y,x1,y1) {
+ this.blocks[x][y] = this.blocks[x1][y1];
+ if (this.blocks[x][y])
+ delete this.blocks[x1][y1];
+}
+test.prototype.collapse_blocks = function() {
+ var didSomething=0;
+ do {
+ didSomething=0;
+ for (var x=0; x<this.blocks.length; x++)
+ for (var y=1; y<this.blocks[x].length; y++) {
+ if (!this.blocks[x][y] && this.blocks[x][y-1]) {
+ this.move_block(x,y,x,y-1);
+ didSomething=1;
+ }
+ }
+ } while (didSomething);
+
+ do {
+ didSomething = 0;
+ for (var x=0; x<this.blocks.length-1; x++) {
+ if (!this.blocks[x][9] && this.blocks[x+1][9]) {
+ for (var y=0; y<this.blocks[x].length; y++)
+ this.move_block(x,y,x+1,y);
+ didSomething = 1;
+ }
+ }
+ } while (didSomething);
+}
+test.prototype.look_for_holes = function() {
+ var was_empty = false;
+ var n_empty = 0;
+ for (var x=0; x<this.blocks.length; x++) {
+ var empty = true;
+ for (var y=0; y<this.blocks[x].length; y++) {
+ if (this.blocks[x][y]) {
+ empty = false;
+ n_empty++;
+ }
+ }
+ if (was_empty)
+ assertEq(empty, true);
+ was_empty = empty;
+ }
+ assertEq(n_empty, 190);
+}
+new test();