Index: test/mjsunit/harmony/collections.js |
diff --git a/test/mjsunit/harmony/collections.js b/test/mjsunit/harmony/collections.js |
index 7bf7bf70639aaee83230ed9beefbcc15ad310eb5..040b969a8b66340a153abc83c82cc4aaf4345004 100644 |
--- a/test/mjsunit/harmony/collections.js |
+++ b/test/mjsunit/harmony/collections.js |
@@ -852,3 +852,127 @@ for (var i = 9; i >= 0; i--) { |
}); |
assertEquals(4950, accumulated); |
})(); |
+ |
+ |
+(function TestMapForEachAllRemovedTransition() { |
+ var map = new Map; |
+ map.set(0, 0); |
+ |
+ var buffer = []; |
+ map.forEach(function(v) { |
+ buffer.push(v); |
+ if (v === 0) { |
+ for (var i = 1; i < 4; i++) { |
+ map.set(i, i); |
+ } |
+ } |
+ |
+ if (v === 3) { |
+ for (var i = 0; i < 4; i++) { |
+ map.delete(i); |
+ } |
+ for (var i = 4; i < 8; i++) { |
+ map.set(i, i); |
+ } |
+ } |
+ }); |
+ |
+ assertArrayEquals([0, 1, 2, 3, 4, 5, 6, 7], buffer); |
+})(); |
+ |
+ |
+(function TestMapForEachClearTransition() { |
+ var map = new Map; |
+ map.set(0, 0); |
+ |
+ var i = 0; |
+ var buffer = []; |
+ map.forEach(function(v) { |
+ buffer.push(v); |
+ if (++i < 5) { |
+ for (var j = 0; j < 5; j++) { |
+ map.clear(); |
+ map.set(i, i); |
+ } |
+ } |
+ }); |
+ |
+ assertArrayEquals([0, 1, 2, 3, 4], buffer); |
+})(); |
+ |
+ |
+(function TestMapForEachNestedNonTrivialTransition() { |
+ var map = new Map; |
+ map.set(0, 0); |
+ |
+ var i = 0; |
+ var buffer = []; |
+ map.forEach(function(v) { |
+ buffer.push(v); |
+ |
+ if (++i > 16) return; |
+ |
+ if (v % 8 == 0) { |
+ for (var j = 1; j <= 8; j++) { |
+ map.set(v + j, v + j); |
+ } |
+ } |
+ |
+ if (v % 2 == 0) { |
+ map.delete(v + 1); |
+ map.delete(v + 3); |
+ } |
+ }); |
+ |
+ for (var i = 0; i <= 16; i++) { |
+ assertEquals(buffer[i], i * 2); |
+ } |
+})(); |
+ |
+ |
+(function TestMapForEachAllRemovedTransitionNoClear() { |
+ var map = new Map; |
+ map.set(0, 0); |
+ |
+ var buffer = []; |
+ map.forEach(function(v) { |
+ buffer.push(v); |
+ if (v === 0) { |
+ for (var i = 1; i < 8; i++) { |
+ map.set(i, i); |
+ } |
+ } |
+ |
+ if (v === 4) { |
+ for (var i = 0; i < 8; i++) { |
+ map.delete(i); |
+ } |
+ } |
+ }); |
+ |
+ assertArrayEquals([0, 1, 2, 3, 4], buffer); |
+})(); |
+ |
+ |
+(function TestMapForEachNoMoreElementsAfterTransition() { |
+ var map = new Map; |
+ map.set(0, 0); |
+ |
+ var buffer = []; |
+ map.forEach(function(v) { |
+ buffer.push(v); |
+ if (v === 0) { |
+ for (var i = 1; i < 16; i++) { |
+ map.set(i, i); |
+ } |
+ } |
+ |
+ if (v === 4) { |
+ for (var i = 5; i < 16; i++) { |
+ map.delete(i); |
+ } |
+ } |
+ }); |
+ |
+ assertArrayEquals([0, 1, 2, 3, 4], buffer); |
+})(); |