X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/2d39b0e377c0896910ee49ae70082ba665faf986..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/tests/stress/iterators-shape.js diff --git a/tests/stress/iterators-shape.js b/tests/stress/iterators-shape.js new file mode 100644 index 0000000..f2718b2 --- /dev/null +++ b/tests/stress/iterators-shape.js @@ -0,0 +1,63 @@ +// This test checks the shape of builtin iterators. + +function iteratorShape(iter) { + if (iter.hasOwnProperty('next')) + throw "Error: iterator should not have next method."; + if (!iter.__proto__.hasOwnProperty('next')) + throw "Error: iterator prototype should have next method."; + if (typeof iter.__proto__.next !== "function") + throw "Error: iterator prototype should have next method."; +} + +function sameNextMethods(iterators) { + var iterator = iterators[0]; + for (var i = 1; i < iterators.length; ++i) { + if (iterator.next !== iterators[i].next) + throw "Error: next method is not the same."; + } +} + +var array = ['Cocoa', 'Cappuccino', 'The des Alizes', 'Matcha', 'Kilimanjaro']; +var iterator = array[Symbol.iterator](); +iteratorShape(iterator); + +var keyIterator = array.keys(); +iteratorShape(keyIterator); + +var keyValueIterator = array.entries(); +iteratorShape(keyValueIterator); + +sameNextMethods([array[Symbol.iterator](), array.keys(), array.entries()]); + +var set = new Set(['Cocoa', 'Cappuccino', 'The des Alizes', 'Matcha', 'Kilimanjaro']); +var iterator = set[Symbol.iterator](); +iteratorShape(iterator); + +var keyIterator = set.keys(); +iteratorShape(keyIterator); + +var keyValueIterator = set.entries(); +iteratorShape(keyValueIterator); + +sameNextMethods([set[Symbol.iterator](), set.keys(), set.entries()]); + +var map = new Map(); +[ + [ 'Cocoa', 2, ], + [ 'Cappuccino', 0 ], + [ 'The des Alizes', 3 ], + [ 'Matcha', 2 ], + [ 'Kilimanjaro', 1] +].forEach(function ([ key, value ]) { + map.set(key, value); +}); +var iterator = map[Symbol.iterator](); +iteratorShape(iterator); + +var keyIterator = map.keys(); +iteratorShape(keyIterator); + +var keyValueIterator = map.entries(); +iteratorShape(keyValueIterator); + +sameNextMethods([map[Symbol.iterator](), map.keys(), map.entries()]);