var t = new Set(); var objectKey = {}; var stringKey = 'keykeykey'; var numberKey = 42.24; var booleanKey = true; var undefinedKey = undefined; var nullKey = null; var nanKey = NaN; var zeroKey = 0; var addReturnValue; t.add(objectKey); t.add(stringKey); t.add(numberKey); t.add(booleanKey); t.add(undefinedKey); t.add(nullKey); t.add(nanKey); addReturnValue = t.add(zeroKey); assert.equal(t.size, 8); assert.equal(t, addReturnValue); assert.isTrue(!t.has({})); assert.isTrue(t.has(objectKey)); assert.isTrue(t.has(stringKey)); assert.isTrue(t.has(numberKey)); assert.isTrue(t.has(booleanKey)); assert.isTrue(t.has(undefinedKey)); assert.isTrue(t.has(nullKey)); assert.isTrue(t.has(nanKey)); assert.isTrue(t.has(zeroKey)); assert.isTrue(t.has('keykeykey')); assert.isTrue(t.has(42.24)); assert.isTrue(t.has(true)); assert.isTrue(t.has(undefined)); assert.isTrue(t.has(null)); assert.isTrue(t.has(NaN)); assert.isTrue(t.has(0)); assert.isTrue(t.has(-0)); var expected = [ undefinedKey, nullKey, stringKey, numberKey, booleanKey, objectKey, nanKey, zeroKey ]; expected.sort(); // forEach var arr = []; var cnt = 0; var context = {}; t.forEach(function(val, val2, obj) { if (isNaN(val)) { assert.isTrue(isNaN(val2)); } else { assert.equal(val, val2); } assert.equal(obj, t); assert.equal(this, context) arr.push(val); cnt++; }, context); assert.equal(cnt, 8); arr.sort(); assertArrayEquals(arr, expected); // iterator arr = []; cnt = 0; for (var setIterVal of t) { arr.push(setIterVal); cnt++; } assert.equal(cnt, 8); arr.sort(); assertArrayEquals(arr, expected); // .values() arr = []; cnt = 0; for (var setIterVal of t.values()) { arr.push(setIterVal); cnt++; } assert.equal(cnt, 8); arr.sort(); assertArrayEquals(arr, expected); var t3 = new Set([[], {}, NaN]); assert.equal(t3.size, 3); assert.isTrue(t3.has(NaN)); t3.delete(NaN); assert.equal(t3.size, 2); t3.delete(NaN); assert.equal(t3.size, 2); t3.clear(); assert.equal(t3.size, 0); // .keys() var t4 = new Set(); var iter = t4.keys(); t4.add(objectKey); t4.add(stringKey); t4.add(nanKey); assert.deepEqual(iter.next(), {value: objectKey, done: false}); assert.deepEqual(iter.next(), {value: stringKey, done: false}); t4.delete(nanKey); assert.deepEqual(iter.next(), {value: undefined, done: true}); assert.equal(Set.prototype.keys, Set.prototype.values); // .entries() var t5 = new Set(); var iter = t5.entries(); t5.add(objectKey); t5.add(stringKey); t5.add(nanKey); assert.deepEqual(iter.next(), {value: [objectKey, objectKey], done: false}); assert.deepEqual(iter.next(), {value: [stringKey, stringKey], done: false}); t5.delete(nanKey); assert.deepEqual(iter.next(), {value: undefined, done: true}); assert.equal(Set.prototype[Symbol.iterator], Set.prototype.values);