Source code

Revision control

Copy as Markdown

Other Tools

/* test Set.prototype.forEach */
load(libdir + 'asserts.js');
load(libdir + 'iteration.js');
// testing success conditions of Set.prototype.forEach
var testSet = new Set();
function callback(value, key, set) {
assertEq(value, key);
testSet.add(value);
assertEq(set.has(key), true);
}
var initialSet = new Set(['a', 1, undefined]);
initialSet.forEach(callback);
// test that both the Sets are equal and are in same order
var iterator = initialSet[Symbol.iterator]();
var count = 0;
for (var v of testSet) {
assertEq(initialSet.has(v), true);
assertIteratorNext(iterator, v);
count++;
}
//check both the Sets we have are equal in size
assertEq(initialSet.size, testSet.size);
assertEq(initialSet.size, count);
var x = { abc: 'test'};
function callback2(value, key, set) {
assertEq(x, this);
}
initialSet = new Set(['a']);
initialSet.forEach(callback2, x);
// testing failure conditions of Set.prototype.forEach
var m = new Map([['a', 1], ['b', 2.3], ['c', undefined]]);
assertThrowsInstanceOf(function() {
Set.prototype.forEach.call(m, callback);
}, TypeError, "Set.prototype.forEach should raise TypeError if not a used on a Set");
var fn = 2;
assertThrowsInstanceOf(function() {
initialSet.forEach(fn);
}, TypeError, "Set.prototype.forEach should raise TypeError if callback is not a function");