diff options
Diffstat (limited to 'deps/v8/test/mjsunit/es6/collections-constructor-custom-iterator.js')
-rw-r--r-- | deps/v8/test/mjsunit/es6/collections-constructor-custom-iterator.js | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/es6/collections-constructor-custom-iterator.js b/deps/v8/test/mjsunit/es6/collections-constructor-custom-iterator.js new file mode 100644 index 0000000000..e4b52bc5c5 --- /dev/null +++ b/deps/v8/test/mjsunit/es6/collections-constructor-custom-iterator.js @@ -0,0 +1,65 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax --opt + +function TestSetWithCustomIterator(ctor) { + const k1 = {}; + const k2 = {}; + const entries = [k1]; + let callCount = 0; + entries[Symbol.iterator] = () => ({ + next: () => + callCount++ === 0 + ? { value: k2, done: false } + : { done: true } + }); + const set = new ctor(entries); + assertFalse(set.has(k1)); + assertTrue(set.has(k2)); + assertEquals(2, callCount); +} +TestSetWithCustomIterator(Set); +TestSetWithCustomIterator(Set); +TestSetWithCustomIterator(Set); +%OptimizeFunctionOnNextCall(TestSetWithCustomIterator); +TestSetWithCustomIterator(Set); +assertOptimized(TestSetWithCustomIterator); + +TestSetWithCustomIterator(WeakSet); +TestSetWithCustomIterator(WeakSet); +TestSetWithCustomIterator(WeakSet); +%OptimizeFunctionOnNextCall(TestSetWithCustomIterator); +TestSetWithCustomIterator(WeakSet); +assertOptimized(TestSetWithCustomIterator); + +function TestMapWithCustomIterator(ctor) { + const k1 = {}; + const k2 = {}; + const entries = [[k1, 1]]; + let callCount = 0; + entries[Symbol.iterator] = () => ({ + next: () => + callCount++ === 0 + ? { value: [k2, 2], done: false } + : { done: true } + }); + const map = new ctor(entries); + assertFalse(map.has(k1)); + assertEquals(2, map.get(k2)); + assertEquals(2, callCount); +} +TestMapWithCustomIterator(Map); +TestMapWithCustomIterator(Map); +TestMapWithCustomIterator(Map); +%OptimizeFunctionOnNextCall(TestMapWithCustomIterator); +TestMapWithCustomIterator(Map); +assertOptimized(TestMapWithCustomIterator); + +TestMapWithCustomIterator(WeakMap); +TestMapWithCustomIterator(WeakMap); +TestMapWithCustomIterator(WeakMap); +%OptimizeFunctionOnNextCall(TestMapWithCustomIterator); +TestMapWithCustomIterator(WeakMap); +assertOptimized(TestMapWithCustomIterator); |